# 面向对象
class People:
classdx = '类变量'#不依赖对象,使用于类的全局修改
def __init__(self,name,age):#初始化属性
self.name = name#对象变量
self.age = age
self.sex = 15
def dxmethod(self):#对象方法类不能调用
print(self)
@classmethod
def classfunction(cls):#类方法,对象不能使用,在对象创建之间需要的功能
print(cls)#<class '__main__.People'>
@staticmethod
def staticfunction():#静态方法 可以访问类变量和方法
print('不用参数的类方法')
print('类似类方法的表达 ' + People.classdx)
def __call__(self,mes):
print(mes)
def __new__(cls, *args, **kwargs):
print('在实例化对象时触发')
position = object.__new__(cls)
return position
def __del__(self):#触发时机 对象没有被引用了 或者 在程序每次运行完 不需要重写
print('删除{}'.format(self))
def __str__(self):#自定义打印对象时显示的信息
return self.name+str(self.age)
a = People('张三',18)
print(a.name)
# print(a.age)
People.classfunction()
print(People.classdx)
People.classdx = '修改全局类变量'
print(People.classdx)
People.staticfunction()
a('把对象当成函数调用')
a1 = a#对象的引用,完全等同
import sys
print(sys.getrefcount(a))#查看对象被引用次数 运行本条语句也算次数
del a1
print(sys.getrefcount(a))
print(a)#张三18
class student:
def __init__(self,name):
self.name = name
self.__age = 18#私有化年龄
def __str__(self):
return str(self.__age)
# def setAge(self,age):#可以设置变量的取值范围
# self.__age = age
#
# def getAge(self):
# return self.__age
@property#set and get 优化方法
def age(self):
return self.__age
@age.setter
def age(self,age):
self.__age = age
s = student('李四')
s.__age = 19#修改没用
print(s)
# s.setAge(20)#修改
# print(s.getAge())
s.age = 100
print(s.age)#不用__
# print(s.age)私有化后不能访问等于没有这个对象变量
print()
print(s.__dir__())#查看对象的方法和属性
# 继承
class Computer:
def __init__(self,name,price):
self.name = name
self.price = price
def play(self):
print('玩电脑')
class Mouse(Computer):#继承Computer
def __init__(self,name,price,brand):
super().__init__(name, price) # 再调用父类
self.brand = brand#子类特有的
super(Mouse, self).play()#调用父类方法
m = Mouse('罗技鼠标',1000,'罗技')
print(m.name)
m.play()
# 多继承
class A:
def test(self):
print('AAA')
class B(A):
def test(self):
print('BBB')
class C(A):
def test(self):
print('CCC')
class D(B,C):
def test(self):
print('DDD')
d = D()
d.test()#就近原则 DBCA 从左到右 广度优先
print(D.__mro__)#打印搜索顺序
# 多态
class People:
def __init__(self,name):
self.name = name
def feed(self,pet):
if isinstance(pet,Pet):#判断具体的多态类型
print('{}在喂{}'.format(self.name, pet.name))
else:
print('{}会吃人'.format(pet.name))
class Pet:
def __init__(self,name):
self.name = name
def run(self):
print(self.name + '在跑')
class Cat(Pet):
pass
class Tigter:
def __init__(self,name):
self.name = name
people = People('张三')
pet = Pet('李四')
cat = Cat('王五')
tiger = Tigter('赵六')
people.feed(pet)
people.feed(cat)
people.feed(tiger)
Java转python学习笔记-面向对象
最新推荐文章于 2024-06-20 18:52:09 发布