今天是面向对象第二天  

昨天主要讲的

封装   继承    多态

封装就是  归类,归类将函数放置到一个类中 打包,将数据打包放到一个对象。

 继承没什么说的,先找自己的,在从左往右找

就是在继承里有个self 的事

    self参数是py帮助我们自动传递。

    如果执行面线对象中的方法时,前面必须有一个对象:xxx。函数名()

还有一个小技能  归类+提取公共值

多态,py原生支持多态,崇尚鸭子模型,由于py函数传参时,无序指定类型:

def  func(a) a可以时多种类型,只要其中有send方法即可。

a。send()

py支持 多继承

 

第二天,1成员     2,嵌套(建模)

1,类的成员

    class foo:

        方法

        def __init__(self,name):

          实例变量/字段

          self.name=name

        方法

        def func(self):

            pass

obj。foo类的对象

obj。foo类的实例

obj=foo(‘aaa’)

成员分为3类:

    变量:

        实例变量(字段)

            公有实例变量(字段)

            私有实例变量(字段)

        类变量(静态字段)

            公有类变量(静态字段)

            私有类变量(静态字段)

            class  foo:

                类变量(静态字段)

                country=‘a’

                def  __init__(self,name):

                    实例变量(字段)

                    self。name=name

                def func(self):

                    pass

            obj1=foo(‘a’)

              obj2=foo(‘b’)

            foo。country

方法 

     实例方法

        class  foo(xx):

            def __init__(self,name):

                self.name=name

            实例方法

            def func(self):

              print(self.name)

        obj=xx(‘aa’)

        obj。func()

   静态方法

        class  foo(xx):

            def__init__(self,name):

              self。name=name

          静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法

            @staticmethod

            def display(a1,a2):

              return     a1+a2

        foo。display(1,3)

  类方法              这两个@后的单词是固定的

        class  foo(object):

            类方法,cls是类

            @  classmethod

            def show(cls,x1,x2):

                print(cls,x1,x2)         <class '__main__.Foo'>   cls打印出这个

        执行类方法

        foo。show(1,8)

属性(通过方法改造出来):

总结:

  1.编写时

      -方法上方写@property

      -方法参数:只有一个self

  2.调用时:无需加括号   对象。方法    这个和staticmethod一样,只是这个能传值,property不能

  3.引用场景。对于简单的方法,当无需传参且有返回值时,可以使用@property

嵌套  

    面向对象

        class school (obj)

def __init__(self, name, address):
self.name = name
self.address = address

def speech(self):
print('讲课')

obj1 = School('老男孩北京校区', '美丽富饶的沙河')
obj2 = School('老男孩上海校区', '浦东新区')
obj3 = School('老男孩深圳校区', '南山区')
class Teacher(object):
def __init__(self, name, age, salary):
self.name = name
self.age = age
self.__salary = salary
self.school = None

t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神',16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech()

这个就是互相调用,好绕,感觉会用的多

准则 字段和方法的归类,