1. 类的定义
>>>class theClass:
... """a simple exampleclass"""
... a = 123
... b = 1.23
... def f(self):
... return 'aasdfasdf'
类的定义如下所示,在类中成员变量默认为公有类型,成员函数的第一个参数一定要是self,在类里面的方法中访问类的成员变量使用self.a,self.b类似这样的方法访问
2. __init__方法
类的初始化如下所示:
X = theClass()
可以把类的实例化看成是一个函数来使用
在一般情况下类初始化之后都是一个空的实例,但是在很多情况下需要将类初始化为有值的状态,因此需要__init__函数,
比如
def __init__(self, c, d):
self.a= c
self.b= d
x = theClass(1, 1.1)
3. 继承
在python中,当一个类继承了另一个类的时候,它将继承父类所有的功能,成员变量,和方法,这有助于代码的重用
#!/usr/bin/envpython3
classPerson(object):
"""asdasdl"""
ppp = 234
def __init__(self, name):
self.name = name
def get_details(self):
return self.name
classStudent(Person):
"""asdasd"""
def __init__(self, name, branch, year):
Person.__init__(self,name)
self.branch = branch
self.year = year
def get_details(self):
"""asasf"""
return "{} {}{}".format(self.name, self.branch, self.year)
person1 =Person('sachin')
student1 =Student('GG', 'cse', 2005)
print(student1.ppp)
print(person1.get_details())
print(student1.get_details())
在这个例子中需要注意以下几点,首先父类会继承子类的全部的变量和方法,可以通过父类的对象直接访问,
然后就是在父类中可以调用子类的构造函数,这个构造函数会被当成普通的函数进行调用,可以使用子类的构造函数创建父类的成员变量,也可以使用父类自己的函数来进行成员变量的创建
在python中的类中,成员变量可以直接在函数里面赋值,假如没有这个成员变量会为这个类创建成员变量
运行结果:
234
sachin
GG cse 2005
4. 有关多继承
#!/usr/bin/envpython3
class a(object):
a1 = 1
def a2(self):
return 'ggfu'
class b(object):
a1 = 4
def b2(self):
return 'ggfugg2'
class c(a, b):
c1 = 4
def c2(self):
self.a1 = 11
b.a1 = 123123
print(a.a2(self))
return 'gggugg3'
ppp = c()
print(ppp.c2())
print(ppp.a1)
print(ppp.a2())
当使用父类的对象访问子类的成员变量和方法的时候,直接加.访问即可,但是假如在成员函数里面访问成员方法和变量,需要在前面加上self.,假如访问的是子类的成员变量和方法需要加上 子类名.,当子类和父类有同名变量或者是方法的时候,使用类的对象访问的时候优先访问子类的,当多个父类有同名变量和方法的时候,使用类的对象访问的时候优先访问第一个父类的方法和变量
以上程序输出为
123123
ggfu
gggugg3
11
Ggfu
5. 删除类的对象
可以使用del删除任何类的对象,在python中,任何变量类型都可以视为一个类的对象
>>>class theClass:
... theNum = 123
...
>>> ppp= theClass()
>>> ppp
<__main__.theClassobject at 0x7ffff686d3c8>
>>> delppp
>>> ppp
Traceback (mostrecent call last):
File "<stdin>", line 1, in<module>
NameError: name'ppp' is not defined
>>>
Del实际上的功能是使对象的引用计数减一,当对象的引用计数为0的时候,垃圾回收器会删除这个对象
6. 类的装饰器
类可以通过@property和@函数名.setter两个装饰器来实现类的成员访问更详细的控制
加上@property装饰器的函数会变为属性,函数只有一个self参数,函数的返回值为属性的调用值,可以在函数里面写上我们需要的内容
加上@函数名.setter的函数会变为当给这个函数名属性赋值的时候会发生什么,
当只定义了@property,这个函数名会变为只读属性