今天学习了面向对象第二部分的内容,有get和set方法,私有属性和私有方法,__del__方法,提了一下引用计数器,继承,方法重写,多继承以及多态的相关内容,具体笔记如下
'''
文件说明:
'''
class Dog:
'''
定义狗类
'''
def set_age(self,new_age):
'''
方法用于设置年龄属性
'''
self.age=new_age
def set_name(self,new_name):
'''
方法用于设置年龄属性
'''
self.name=new_name
def get_age(self):
'''
用于获取年龄
'''
return self.age
def get_name(self):
'''用于获取名字'''
return self.name
dog=Dog()
dog.set_age(18)
dog.set_name("小强")
#通过赋值方式修改属性从一定程度上将不是很安全
# dog.name="老王"
# dog.age=-18
name=dog.get_name()
age=dog.get_name()
print(name,age)
'''
文件说明
私有属性,只能在类的內部使用,外部无法访问
如何定义?
在属性的变量名字前面加上__
'''
class Dog:
'''
定义狗类
'''
def __init__(self,new_name):
self.name=new_name
#定义了一个私有属性,属性名字是__age
self.__age=9
def set_age(self,new_age):
'''
方法用于设置年龄属性
'''
if new_age>0 and new_age<100:
self.__age=new_age
else:
self.__age=0
def set_name(self,new_name):
'''
方法用于设置年龄属性
'''
self.name=new_name
def get_age(self):
'''
用于获取年龄
'''
return self.__age
def get_name(self):
'''用于获取名字'''
return self.name
dog=Dog("旺财")
dog.set_age(-10)
print(dog.get_age())
dog=Dog("捡起")
dog.set_age(20)
print(dog.get_age())
#此处通过该方式设置的变量并非私有变量,对类中的定义的私有变量无任何影响
# dog.__age=-10
# print(dog.__age)
# print(dog.get_age())
'''
文件说明
'''
class SuperVIP:
def __skin(self):
'''
定义私有方法
'''
print("开始装扮超级会员专属皮肤!")
def verrify(self,is_vip):
if is_vip=="vip":
self.__skin()
else:
print("请开通会员")
vip=SuperVIP()
#私有方法只能在内部使用,外部无法调用
#vip.__skin()
vip.verrify("p")
'''
文件说明
'''
class Hero:
def __del__(self):
'''
1.当程序结束时,将释放所有的对象,del自动调用,完成清理工作
'''
print("lalala")
pass
h1 = Hero()
h2 = h1
del h1#删除了h1的引用,__del方法不会被执行,因为还有h2指向hero
del h2#删除了Hero对象所有的引用,此时会执行__del__方法
print("============")
'''
文件说明
通过sys.getrefcount(t1)我们可以获取到引用指向的对象有几个引用指向这个对象(结果比实际值大1)
'''
import sys
class T:
pass
t1 = T()
t2 = t1
t3 = t2
i=sys.getrefcount(t1)
print(i)
'''
文件说明:
什么是继承?
当一个类中需要大量使用另一个类中的内容的时候,我们可以使用继承的方法
被继承的类称之位 父类 或者 基类
继承的类称之为 子类 或者 派生类
一个父类可以拥有多个子类,子类可以使用父类的方法,子类之间的方法不能相互使用
继承的方式:
class 子类名称(父类名称):
子类属性
子类方法
'''
class Animal:
'''定义动物类'''
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def jump(self):
print("跳")
class Dog(Animal):
def bark(self):
print("狂吠中!")
class Cat(Animal):
def mouse(self):
print("抓老鼠")
dog1=Dog()
dog1.jump()
cat1=Cat()
'''
文件说明:
'''
class Animal:
'''定义动物类'''
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def jump(self):
print("跳")
class Dog(Animal):
def bark(self):
print("狂吠中!")
class Xiaotg(Dog):
def fly(self):
print("正在飞")
#子类继承了父类以及父类的父类等等的所有的方法
jianqi=Xiaotg()
jianqi.jump()
jianqi.bark()
jianqi.fly()
'''
文件说明:
方法重写:
1.当父类的方法不满足当下的需求的时候,可以对该方法进行重写,(方法名和父类中的一致)
2.重写的方法,如果想要调用被重写的方法可以使用两种方法
类名.方法名
super().方法名 就近原则
'''
class Animal:
'''定义动物类'''
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def jump(self):
print("跳")
class Dog(Animal):
def bark(self):
print("狂吠中!")
def jump(self):
print("跳")
class Xiaotg(Dog):
def fly(self):
print("正在飞")
def jump(self):
print("疯狂的跳")
#Animal.jump(self)
super().jump()#就近原则
#子类继承了父类以及父类的父类等等的所有的方法
jianqi=Xiaotg()
#当父类的方法不满足当下的需求的时候,可以对该方法进行重写,(方法名和父类中的一致)
jianqi.jump()
jianqi.bark()
jianqi.fly()
'''
文件说明:
私有方法和属性不能被继承,如果私有的属性和方法想要被子类使用,在父类中提供一个公有的方法去操作私有的方法或属性
'''
class A:
def __init__(self):
self.num=10
#定义私有属性
self.__num1=100
def test1(self):
print("11111")
def __test2(self):
print("22222")
def test3(self):
print(self.__num1)
class B(A):
pass
b1=B()
b1.test1()
print(b1.num)
b1.test2()
print(b1.__num1)
'''
文件说明:
Python支持多继承
一个类如果想要继承多个类,可以在类名后面的括号中,写上多个父类的名称,用逗号隔开
print(D.__mro__)使用 类名.__mro__方法可以查看当前类的调用顺序
底层:C3算法
'''
class A(object):
def test(self):
print("a")
class B(A):
def test1(self):
print("b")
class C(A):
def test2(self):
print("c")
class D(B,C):
def test3(self):
print("D")
A.test(self)
d=D()
d.test()
d.test1()
d.test2()
d.test3()
print(D.__mro__)
'''
文件说明:
让具有不同功能的函数可以使用相同的名字,这样就可以使用一个函数名称调用不同功能(函数)
Pythond的多态
1.只关心对下的实力方法名是否相同,不关心对象的类型
2.不关心对象之间的继承关系
3.好处是让代码的外部调用更灵活
'''
class Dog(object):
def print_self(self):
print("你好我是一只狗我的名字叫旺财")
class Cat(object):
def print_self(self):
print("你好我是一只猫我的名字叫小叮当")
def introduce(temp):
temp.print_self()
dog=Dog()
cat=Cat()
introduce(dog)
introduce(cat)
6249

被折叠的 条评论
为什么被折叠?



