五、类与对象
1. 定义与生成
定义:
class Teacher: #Python中的类名**约定以大写字母开头**
age = 20 #属性
weight = '10'
def run(def): #方法
print('老师正在努力的跑…')
def sleep(def):
print('老师正在睡觉…')
继承:
class Demo(People): #表明Demo类 *继承* 了People类。
pass #pass表示不做任何事
classDemo(Test1,Test2…) #可以 *多继承* ,逗号隔开
pass
生成:
Libai = Teacher()
2. 语法细节
- 1.__init__(self,param1,param2…):
构造函数 #self相当于Java里的this
#创建函数时自动调用,而且参数必须对应
- 2.私有变量/方法:
在变量名或函数名前加上"_" 两个下划线即为私有
实际上是将变量名改为: _类名_变量名
单下划线在外部仍然可以调用
-
3.super(): 用法: super()._init_() #会自动寻找父类方法并传入需要的参数
-
4.issubclass(class,classinfo):
如果第一个参数是第二个参数的子类,返回True,否则False
classinfo可以是类对象组成的元组,是其中任何一个类的子类即返回True
任何类都是object的子类
- 5.isinstance(object,classinfo):
检查一个实例对象是否属于类。classinfo注意点同上
检查一个对象(object)是否属于classinfo类
-
6.hasattr(object,name):测试一个对象(object)是否有指定的属性(name)(用引号括起来)
-
7.getattr(object,name):如果没有就打印default字符串
-
8.setattr(object,name,value):如果属性不存在,就创建这个属性并赋值
-
9.delattr(object,name):删除对象中指定的属性
-
10.x = property(get,set,del):
三个参数分别为获取属性的方法,设置属性的方法,删除属性的方法执行c1.x=18; c1.x; del c1.x时会分别调用这三个函数,对里面的函数所控制的参数进行操作
- 11.__new__(cls[, …]):当继承一个不可变类型的时候,需要用此方法进行修改
例:
class CapStr(str): #将创建对象是传入的字符串改为全大写
def _new_(cls,string):
string = string.upper()
return str._new_(cls,string)
- 12.__del__(self):
当对象将要被销毁的时候,对象会自动调用此方法。当没有任何变量引用这个对象的时候,就会调用对象的此方法进行回收
- 13.dict:以字典的方式返回对象中的属性和属性值
例:
demo.__dict__
3.属性访问(rectangle.py)
(1) __getattr__(self,name) # 定义当用户试图获取一个不存在的属性时的行为
(2) __getattribute__(self,name) #定义当该类的属性被访问时的行为
(3) __setattr__(self,name,value) #定义当一个属性被设置时的行为
(4) __delattr__(self,name) #定义一个属性被删除时的行为
4.描述符(MyProperty.py temp.py)
-
定义:描述符就是将某种特殊类型的类的实例指派给另一个类的属性
-
__get__(self,instance,owner):用于访问属性,他返回属性的值
-
__set__(self,instance,value):将在属性分配操作中调用,不返回任何内容
-
__delete__(self,instance):控制删除操作,不返回任何内容
5.魔法方法
格式: __demo__ #这种格式(前后双下划线)均为魔法方法
使用:
例:
class CapStr(str): #将创建对象是传入的字符串改为全大写
def _new_(cls,string):
string = string.upper()
return str._new_(cls,string)
- (1) 算数运算符
- (2) 反运算
例:
class Nint(int):
def_radd_(self,other):
return int._sub_(self,other)
运行:
a = Nint(5)
b =Nint(3) # b相当于上述公式里的other
结果:
a + b = 8
1 + b = 2
- (3) 增量赋值运算
- (4) 一元操作符