day23

今日所学:

     一:类属性与对象属性

            类中应该仅存储所有对象共有的内容,如所有人的国籍相同就放到类中

    对象中存储每个对象独有的内容,如每个人的名字都不同

     二:init方法的作用

           init 是对初始化的缩写,用于对象的属性设置初始值特点:

               1,执行时机:当实例化产生对象时会自动执行该函数

     2,会自动传入需要初始化的对象

     3,初始化必须包含至少一个参数 用于表示对象本身

     4,该函数不允许有返回值,必须为None

  三:绑定方法

                  方法就是函数,那就是说绑定方法 ==绑定函数

                  默认情况下 在类中定义的方法 都是绑定方法

      绑定方法是把函数和对象绑定到一起

绑定方法与普通函数的区别

个类中可以有属性和方法

方法分为两种

1.绑定方法

​ 1.1对象绑定方法

​ 在使用对象调用时会自动传入对象本身

​ 1.2类绑定方法

​ @classmethod

​ 在使用对象调用时会自动传入类本身

​ 在使用类来调用时也会自动传入类本身

​ 单例模式中就会经常使用@classmethod

 

到底绑定给谁?

当你的方法执行过程中需要使用到对象中数据时就绑定给对象

当你的方法执行过程中需要使用到类中数据时就绑定给类

 

2.非绑定方法

即不需要对象中的数据 也不需要类中的数据  那就定义为非绑定方法,就是普通函数

@staticmethod

oop知识点:

1.属性应该放在类中还是对象中

2.绑定方法  == 绑定函数

对象绑定方法

​ 对象调用时 自动传入对象本身

​ 类调用时不会自动传参 有几个就需要传几个

类绑定方法

​ @classmethod

​ 无论是对象还是类调用 都会自动传入类本身

非绑定方法(静态方法)

​ @staticmethod

​ 谁调用都不会自动传参

继承

继承指的是一种关系,在生活中通过继承关系,例如王思聪继承王健林,对于王思聪可以,可以直接使用王健林已经拥有的

被继承的一方(王健林) 称之为父   继承的一方(王思聪) 称之为子

在OOP中 继承描述是类和类之间的关系  例如b类继承a类  b类可以直接使用a类中的属性和方法

a是父类(基类,超类)  b是子类(派生类)

好处:极大的提高了代码的复用性

 

如何使用继承,至少需要两个类

语法:

class 子类名称(父类名称):

​ pass

class Teacher:
   school = "oldboy"
   def __init__(self,name,age):
       self.name = name
       self.age = age

   def say_hi(self):
       print("hello i am %s" % self.name)
       
   def teach(self):
       print("正在教书......")

class Student(Teacher):
   pass

print(Student.school)
print(Student.say_hi)
print(Teacher.say_hi)

s = Student("rose","123")
s.say_hi()
s.teach()

在上述案例中通过继承 学生就拥有了老师的所有内容  但是学生不应该教书这个技能
意味着这个继承关系 有问题 不合理
需要先抽象 在继承
原文地址:https://www.cnblogs.com/Fzhiyuan/p/10878609.html