面向对象

(一)定义类class,和类的调用

#函数的定义和调用
def show():
    print('this is a function')
show()

#class内部定义函数和调用
class Person(object):
    def show(self):
        print('this is a class')
obj=Person()
obj.show()

 

(二)init初始化

'''执行顺序: 1.执行init方法 2.执行具体调用方法 3.最后执行del方法 '''

实例属性

class Person(object):
    #针对类的初始化
    def __init__(self,name,age):#name,age也叫属性,是赋予初始化的形式参数
        #这个是实例化属性的过程,self代表类本身
        self.name=name
        self.age=age

    def show(self):
        #格式化字符串输出更好看
        print('my name is {name},我今年 {age}'.format(name=self.name,age=self.age))
    #析构方法:清理
    def __del__(self):
        print('执行结束')
#实例化class,也是对init的初始化,即对init里边的形式参数赋值。最后再调用
obj=Person(name='zx',age='11')
obj.show()

 

数据属性

class Person(object):
    city='xian'  #赋予类的全局变量
    #针对类的初始化
    def __init__(self,name,age):#name,age也叫属性,是赋予初始化的形式参数
        #这个是实例化属性的过程,self代表类本身
        self.name=name
        self.age=age

    def show(self):
        #格式化字符串输出更好看
        print('my name is {name},我今年 {age},我是{city}的'.format(name=self.name,age=self.age,city=self.city))
    #析构方法:清理
    def __del__(self):
        print('执行结束')
#实例化class,也是对init的初始化,即对init里边的形式参数赋值。最后再调用
obj=Person(name='zx',age='11')
obj.show()

 

(三)类里边的参数

默认参数、动态动态参数的增加

class Person(object):
    #针对类的初始化
    def __init__(self,name,age):#name,age也叫属性,是赋予初始化的形式参数
        #这个是实例化属性的过程,self代表类本身
        self.name=name
        self.age=age

    def show(self,sex='girl'):
        #格式化字符串输出更好看    方法里边的形式参数
        print('my name is {name},我今年 {age},我是个{sex}'.format(name=self.name,age=self.age,sex=sex))

    # # 赋予动态参数
    def info(self, **kwargs):
        return kwargs

    #析构方法:清理
    def __del__(self):
        print('执行结束')
#实例化class,也是对init的初始化,即对init里边的形式参数赋值。最后再调用
obj=Person(name='zx',age='11')
obj.show()
print(obj.info(name='zx', age=12, address='xian', work='teacher'))

 

(四)类里边的方法

1.普通方法和函数毫无区别

2.特性方法,只读只返回数据

3.需要用到数据调用的时候给实际参数赋值

class Person(object):
    def show(self):
        print('这是一个普通方法,和函数无异')

    # 特性方法只需要返回数据的时候可用
    @property
    def info(self):
        print('特性方法是只读属性')

    #方法和方法直接的调用
    def login(self,username,password):
        if username=='zx' and password=='admin':
            return True
        else:
            return False

    def profile(self,username,password):
        if self.login(username=username,password=password):
            print('访问主页成功')

obj=Person()
obj.show()
obj.info
obj.profile(username='zx',password='admin')

 

 

 

(五)封装

实例属性的第二种写法.封装过程:获取name,之后在输出的地方操作name,看不见过程,有了内部逻辑

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def getx(self):
         return self.name,self.age

    def setx(self, name,age):
        if len(name)>2 and len(name)<7:
            self.name = name
        else:
            print('超出名字范围')
        if age>18:
            self.age=age
        else:
            print('未成年')

    def show(self):
        print(self.name,self.age)

obj=Person(name='wahah',age=22)
print(obj.getx())
obj.setx(name='zxx',age=17)
print(obj.getx())