1.0.1 类的定义:
class Bra: def foo(self,name,age,gender,content): print(name,age,gender,content) obj = Bar() obj.foo()
函数定义:def +函数名(参数)
面向对象:
class >>>>>类,class Bar: >>>>>>名字叫Bar的类
def >>>>>>方法,def foo():>>>>>>名字叫foo 的方法
self>>>>>> 方法里面的第一个参数必须是self.
class 类名: def 方法名(self,agr): print(arg) 中间人 = 类名() 执行: 中间人.方法名()
1.0.2 执行:
函数:
函数名(参数)
面向对象:
obj = Bar() >>>>创建中间人,叫:对象或实例
执行:obj.foo()
面向对象:类与中间人的应用!!!
1.0.3 self 是什么东西:
执行的时候self 就是中间人!!!
self 代指的是 调用方法的对象(中间人)
class Bar: def foo(self,arg): print(self,arg) obj = Bar() print(obj) #这个是直接打印obj obj.foo(123) #这先执行打印self,再打印arg=123
<__main__.Bar object at 0x000000000225EC88> <__main__.Bar object at 0x000000000225EC88> 123
所以其实 这个self ====obj,哪个对象调用,就是self就代指哪个对象
class Bar: def foo(self,arg): print(self,arg) obj = Bar() print(obj) obj.foo(123) print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") obj1 = Bar() print(obj1) obj1.foo(6666) 执行结果: <__main__.Bar object at 0x000000000284FCF8> <__main__.Bar object at 0x000000000284FCF8> 123 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <__main__.Bar object at 0x000000000284FF60> <__main__.Bar object at 0x000000000284FF60> 6666
self 是可以传参的:
class Bar: def foo(self,arg): print(self,self.name,self.age,self.gender,arg) #这个时候self = obj,所以self.name = obj.name = 18 obj = Bar() #这个时候self = obj obj.name = 'rollo' #这个时候self = obj,所以self.name = obj.name = rollo obj.age = 18 #这个时候self = obj,所以self.age = obj.age = 18 obj.gender = 'male' #这个时候self = obj,所以self.gender = obj.gender = male obj.foo(6666) obj1 = Bar() #这个时候self = obj1 obj1.name = 'dump' #这个时候self = obj1,所以self.name = obj1.name = dump obj1.age = 19 #这个时候self = obj1,所以self.age = obj1.age = 19 obj1.gender = 'female' #这个时候self = obj1,所以self.gender = obj1.gender = female obj1.foo(88888) 执行结果: <__main__.Bar object at 0x0000000001D676D8> rollo 18 male 6666 <__main__.Bar object at 0x0000000005858198> dump 19 female 88888
面向对象三大特性:封装,继承,多态
封装就是用self.
1.0.4 构造方法:__init__ ,类名+()自动 执行构造方法
特殊作用:
在
obj = 类名()
#创建对象
#通过对象调用一个特殊方法。
def __init__(self):
class Bar: def __init__(self): print("666") obj = Bar() print(obj) #666,然后执行init方法 执行结果: 666 <__main__.Bar object at 0x000000000286FDA0>
class Boot: def __init__(self,n1,n2,n3): #构造好参数在init里面,在外面只要调用 就OK self.name1 = n1 self.name2 = n2 self.name3 = n3 self.name4 = n3 self.name5 = n3 self.name6 = n3 def fun(self): print(self.name1,self.name2,self.name3) obj = Boot(4,5,6) print(obj.name1) obj.fun()
class Person: def __init__(self,name,age): self.name = name self.age = age def show(self): print('%s----%s' % (self.name,self.age)) obj1 = Person('rollo',24) obj1.show() obj2 = Person('stock',36) obj2.show() #执行结果: rollo----24 stock----36
class Person: def __init__(self,name,age,): self.name = name self.age = age self.bloodtype = 'O' #公共的,都有的就可以直接写好 def show(self): print('%s----%s---%s' % (self.name,self.age,self.bloodtype)) obj1 = Person('rollo',24) obj1.show() obj2 = Person('stock',36) obj2.show()
适用场景:
如果多个函数中有一些相同的参数时,转换成:面向对象编程。