使用get和set方法保护对象属性
class Dog:
def set_age(self,new_age):
self.age=new_age
def get_age(self):
return self.age;
------------------------------------------私有方法----------------------------------
class Dog:
def __send_msg(self):
print("该方法前面有__是私有方法只能在本类中调用,不能在外部调用")
def send_msg(self):
print("该方法前没有__是共有方法,可以在本类和外部调用")
---------------------------------------------__del__()方法--------------------------------------------
当类的对象被删除时会走del() 方法
class Dog:
def __del__(self):
print("删除")
dog1= Dog();
dog2 = dog1
del dog1
del dog2
注释:
执行步骤是首先创建dog1对象引用指向Dog实体,dog2引用=dog1=Dog()实体,dog2指向Dog实体,然后del dog1 会走__del__(self)方法, 然后会走 del dog2方法 然后走 __del__(self):方法
-----------------------------------------获取引用计数--------------------------------------
引用计数就是一个实体对象被几个引用指向,
例如:
d1=new Dog(),
d2=d1
d3=d1
那么Dog实体被三个引用指向,它的引用计数就是三
可以在终端通过以下方法获取引用计数
import sys
class T:
pass
t=T();
sys.getrefcount(t) #获取引用计数返回结果是2,在返回结果上减1就是该实体的实际引用计数
------------------------------------------继承---------------------------------------------------------
格式:
class 子类(父类):
子类只能继承父类公用的方法,不能继承私有方法
例如:
class Animal:
def eat(self)
print("--------吃----------")
def drink(self)
print("--------喝----------")
def sleep(self)
print("-------睡觉--------")
def run(self)
print("--------跑----------")
class Dog(Animal):
def run(self)
print("-----四条腿跑--------")
注释:以上Dog类继承Animal类
Dog里面的run方法表示重写父类run方法
在Python中允许有多继承
例如
class A:
calss B:
class C(A,B):
class C同时继承A和B,类C在调用ABC中都相同的方法时会先去走C里面再去走A 再去走B
-------------------------------------------------super()--------------------------------------
在子类中调用父类的方法可以用super().父类方法 来调用父类的方法
---------------------------------------------------多态---------------------------------------
class Dog:
def print_self(self):
print("Dog")
class Xiaotq(Dog):
def print_self(self):
print("xiaotq")
def introduce(temp)
temp.print_selt()
dog1 =Dog()
dog2 = Xiaotq()
introduce(dog1)
introduce(dog2)
注释:在类里面的叫方法,在类外面的叫函数,
注释:函数introduce()里面既可以传dog1也可以传dog2这就叫多态
--------------------------------------------------类对象/属性,实例对象/属性----------------------------------------------
#类对象
class Student:
#类属性
number=0
#类方法
@classmethod
def add_num(cls):
cls.number=100
#实例方法
def __init__(self,new_name):
#实例属性
self.name=new_name
#实例对象
s1 =Student("张三")
s2 =Student("李四")
注释:
实例属性:和具体的某个实例对象有关系,并且一个实例对象和另一个实例对象是不共享属性的,例如:s1的name张三 和 s2的name李四是不共享属性的
类属性:类属性所属于类对象,并且多个实例之间共享一个类属性,例如;s1的number和s2的number是共享属性的,都可以使用并且修改该属性
被@classmethod修饰的是类方法
类属性的调用:
s3 = Student("王五")
s3.add_num()或者Student.add_num():来调用类属性
常见的三种方法:
def __init__(self)#实例方法 必须穿参数self
@classmethod
def add_num(cls):#类方法必须有注解@classmethod 和传参数 cls
@staticmethod
def print_menu():#静态方法被类名.方法调用或者对象.方法调用,必须有注解@staticmethod ,不用传参数