面向对象第三天,心好累
首先昨日内容回顾
1成员,
变量
-类变量(静态字段) 类 字段/对象。字段
-示例变量(字段) 对象。字段
方法
-实例方法 对象。方法名
-静态方法 类。方法名/对象。方法名
-类方法 类。方法名/对象。方法名
属性
-属性 对象。属性名
修饰符 就是@staticmethod @classmethod 这是方法修饰符都是在方法上写的
属性修饰符也一样property
组合(嵌套) 这个比较重要,今天重要的课程也是补充这个
今天内容主要是组合补充了一下
主动调用其他类的成员 方式一:
class base(object):
def f1(self):
print(‘5’)
class foo(object):
def f1(self):
print (‘3)
base。f1(self) 这里注意不存在类的继承,不继承也能用
obj=foo()
obj。f1()
总结 base。实例方法(自己传self) 与继承无关,这打印3后打5
方式2,按照类的继承顺序,找下一个。
class foo(object):
def f1(self):super是按照类的继承顺序去找下一个
super()。f1()这里注意super找的是self
print(‘3’)
class bar(object):
def f1(self):
print(‘6’)
class info(foo,bar);
pass
obj=foo()
obj=f1() 这个正常走f1没什么
obj=info()
obj。f1()这个就是继承顺序了
特殊方法 class foo(object):
def __init__(self,a1,a2):
self.a1=a1
self.a2=a2
def __call__(self,*args,**kwargs): args万能传参,kwargs关键字传参
print( 1 , args , kwargs) args单独的传参都能接收,关键字传参变成字典
def __getitems__(self,item)
print(item)
return 1
def __setitems__(self,key,value)
print(key,value,任何值)打印出来的xx 11 任何值
def __delitem__(self,key):
print(key)
def __add__(self,other):
return self.a1+other+a2
def __enter__(self):
print('1') 可以return
def __exit__(self ,一堆自己出的):
print(‘2’)
def __new__(cls,*args,**kwargs): 正常是先执行new再执行init 如果有new必须有返回值才执行init 返回值就是对象, return object。__new__(cls)
new 内部创建一个空对象,然后传给init 就是为了把对象和值,通过new传一下
v1=object.__new__(cls)
return v1 他这个v1和下边的obj内存地址是一样的,只是下面的是把值传给类之后的init之后的obj里面有东西 v1是空的
new 构造方法 init初始化方法
obj = foo (1,2)
1. 对象=类名()自动执行__init__ 括号内可传值
obj=foo(实参)
2. 对象() 自动执行__call__
obj(实参,关键字实参) 如果上面有return 也能打印返回值 a=obj。。。 print (a)
3.对象 【】 自动执行__getitems__
obj【‘实参’】 打印这个实参 如果上面有return 也能打印返回值 a=obj。。。 print (a)
4.对象 【】 自动执行__setitems__
obj【‘xx’】=11 这个没有返回值 a=obj【x】=2 这个导致a 和x都等于2
5。del 对象【xx】 自动执行__delitem__
del obj【‘aa’】 这个也没有返回值
6。对象+对象 自动执行__add__
obj1=foo(1,2)
boj2=foo(8,9)
obji1+obj2 a=obj1+obj2 print(a)
7.with 对象
obj=foo(1,2) obj=foo(1,2)
with obj: with obj as f:
print(‘中间’) print(f) 这个f就是返回值 类似文件操作
8.真正的构造方法