【Rollo的Python之路】面向对象 学习笔记 (一) 封装

时间:2022-12-12 21:28:17

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()

 

适用场景:

  如果多个函数中有一些相同的参数时,转换成:面向对象编程。