类的定义:
class Stu():
name="swallow"
age=18
add="shantou"
send=None
def doHome(self):
print("lalal")
return None
查看定义的类有什么东西
Stu._dict_
对象定义与操作:
lili=Stu()
lili.name="lili"
lili.doHome()
类、对象访问
class Stu():
name="swallow"
age=19
def say(s):
name="lili"
age=11
print(s.name)#lili
print(_class_.age) #19
def say():
print("lalal")
a=Stu()
A.say() #访问say()只能有类名访问除非有传值
定义私有成员前面加__下划线以及访问,构造函数
class Stu():
__age=18
def __init__(self):
print("gouzao")
a=Stu()
print(a._Stu__age)
构造函数
- 是一类特殊的函数,在类进行实例化之前进行调用
- 如果定义了构造函数,则实例化时使用构造函数,不查找父类构造函数
- 如果没定义,则自动查找父类构造函数
- 如果子类没定义,父类的构造函数带参数,则构造对象时的参数应该按父类参数构造
类的继承:
class Stu():
name="swallwo"
class Teacher(Stu):
class Header(Stu,Teach):
print(Header.__mro__) #显示出继承的所有父类和本身
继承的特征:
- 所有的类都继承自 object类,即所有的类都是 object类的子类
- 子类一旦继承父类,则可以使用父类中除私有成员外的所有内容
- 子类继承父类后并没有将父类成员完全赋值到子类中,而是通过引用关系访问调用
- 子类中可以定义独有的成员属性和方法
- 子类中定义的成员和父类成员如果相同,则优先使用子类成员
- 子类如果想扩充父类的方法,可以在定义新方法的同事访问父类成员来进行代码重用
- 可以使用父类名.父类成员的格式来调用父类成员,也可以使用 super().父类成员的格式来调用
- super不是关键字,而是一个类
- super的作用是获取MR0( MethodResolustion0rder)列表中的第一个类
- super于父类直接没任何实质性关系,但通过 super可以调用到父类
- super使用两个方,参见在构造函数中调用父类的构造函数
类的常用函数:
- subclass:检测一个类是否是另一个类的子类
- instance:检测一个对象是否是一个类的实例
- hasattr:检测一个对象是否由成员xXx
- etattr: get attribute
- setattr: set attribute
- delattr: delete attribute
- dir:获取对象的成员列表
class A():
name="swallow"
class B(A):
pass
class C():
pass
a=A()
print(issubclass(A,B))
print(isinstance(A,A))
print(hasattr(a,"name"))
setattr(a,"name",lili)
dir(A)
property方法:
class Person():
def fget(self):
return self._name*2
def fset(self,name):
self._name=name.upper()
def fdel(self):
self._name="None"
name.property(fget,fset,fdel,"对name进行操作")
p1=Person()
p1.name="swallow"
print(p1.name)
类的内置属性:
- __dict__:以字典的方式显示类的成员组成
- __doc__:获取类的文档信息
- __name__:获取类的名称,如果在模块中使用,则获取的是模块的名称
- __bases__:获取某个类的所有父类,以元组的方式显示
类的魔术方法:
__call__:对象当函数调用时触发
class A():
def __init__(self):
print("fist")
def __call__(self):
print("second")
a=A()
a()
__str__:对象当字符串使用时触发
class A():
def __init__(self):
print("fist")
def __str__(self):
return "fan hui de zifuchuan"
a=A()
print(a)
__getattr__:访问没有的属性时触发
class A():
def __init__(self):
print("fist")
def __getattr__(self,name):
print("name is not be found")
a=A()
print(a.name)
__setattr__:对成员属性进行设置时触发
class A():
def __init__(self):
print("fist")
def __setattr__(self,name,value):
print("name ={0}".format(name))
supper().__setattr__(name,value):
a=A()
a.age=1
__gt__:进行大于判断时触发,__gt__(self,obj)
类的三种方法
cLass person:
#实例方法
def eat(self):
print(self)
print("Eating..")
#类方法
#类方法的第一个参数,一般命名为Cl5,区别于self
@classmethod
def play (cls):
print (cls)
print("Playing.. ")
#静态方法
#不需要用第一个参数表示自身或者类
@staticmethod
def say ():
print("Saying..")
yueyue Person()