3/17课后总结
绑定方法
"""
一般来说,在类里定义的属性和方法都是默认绑定给对象的
绑定给对象的方法,就需要对象来调用
"""
class Dog:
def __init__(self, name):
self.name = name
def say_hi(self): # 绑定给对象的方法
print('wangwang')
@classmethod # 内置装饰器,将该方法绑定给类,用类来调用
def animal(cls): # 绑定给类的方法
return cls('mimi')
dog = Dog('dahuang')
dog.say_hi()
cat = dog.animal()
cat.say_hi()
"""
绑定给对象的方法特殊之处就是:把对象名作为第一个参数,传给方法的第一个形参就是self
绑定给类的方法特殊之处就是:把类名作为第一个参数传给方法的第一个形参就是cls
"""
非绑定方法
class Dog:
def __init__(self, name):
self.name = name
@staticmethod # 静态方法,不绑定类也不绑定对象
def get_id():
import uuid # 只要长度固定,生成随机数,理论上肯定会重复
return uuid.uuid4()
def index(self): # 如果对象和类都用到了,推荐绑定给对象self.__class__就是该对象的类了
pass
print(dog.get_id())
隐藏属性(私有属性)
# 1.定义
"""
隐藏属性或者隐藏方法就是也可称为私有属性私有方法
在别的语言里定义私有属性一般都是private加属性名
python中私有属性为:__name,私有方法为def __index():
属性或者方法,隐藏后,对内不对外,在外部无法直接调用,在类里面可以
或者使用_类名__属性(方法名)进行强制调用
在python中没有绝对的私有或者隐藏的
"""
class people:
__userid = 123456
def __init__(self,name, age):
self.name = name
self.age = age
laowang = people('laowang',21)
print(laowang.userid) # 直接报错,找不到userid
print(laowang.__userid) # 直接报错,找不到__userid
print(laowang._people__userid) # 强制调用私有属性userid
# 一般情况下我们不会强制调用私有属性,如果想要查看或者修改私有属性或者方法一般都是在内部写一个接口,用来返回私有属性的值
def get_userid(self): # 用于查看userid
return self.__userid
def set_userid(self,value): # 用于修改userid
self.__userid = value
return f'修改后的ID为{self.__userid}'
print(laowang.get_userid())
print(laowang.set_userid(111111))
property装饰器
"""
主要用处是把方法伪装成属性使用,如同上面的get_userid和set_userid
伪装后就可以直接用laowang.useid使用
"""
class people:
__userid = 123456
def __init__(self,name, age):
self.name = name
self.age = age
@property # 查看
def useid(self):
return self.__userid
@userid.setter # 修改
def useid(self,value):
self.__userid = value
return f'修改后的ID为{self.__userid}'
@userid.deleter # 删除
def userid(self):
del self.__userid
laowang = people('laowang',123)
print(laowang.userid)
laowang.userid = 9999
del laowang.userid
# 关于property还有一种使用方法
class people:
__userid = 123456
def __init__(self, name, age):
self.name = name
self.age = age
def get_userid(self):
return self.__userid
def set_userid(self, value):
self.__userid = value
def del_userid(self):
del self.__userid
userid = property(get_userid,set_userid,del_userid)
laowang = people('laowang',123)
print(laowang.userid)
laowang.userid = 9999
del laowang.userid
class Me:
def __init__(self,weight, height):
self.weight = weight
self.height = height
@property
def bmi(self):
return self.weight / self.height ** 2
me = Me(65,1.8)
print(me.bmi)
面向对象的三大特征
# 继承
# 封装
# 多态
继承
"""
一种新建类的方式,class Dog(animal):这种就可以说Dog是animal的子类或者派生类,animal是Dog的父类或者基类
子类可以继承父类所有的属性和方法,父类可以通过特殊手段调用子类的属性或方法
类是解决对象之间代码的冗余
继承是解决类之间代码的冗余
经典类:没有继承object类的子子孙孙类都是经典类
新式类:继承了object类的子子孙孙类都是新式类
只有再python2中才区分经典类和新式类,在python3中,全部都是新式类
"""
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
class Dog(Animal): # 继承了Animal类
def __init__(self,name,age):
Animal.__init__(self,name,age)
dog = Dog('dahuang',2)
print(dog.__dict__) # 输出结果:{'name': 'dahuang', 'age': 2}
标签:总结,__,name,17,self,userid,课后,laowang,def
From: https://www.cnblogs.com/juzixiong/p/17237361.html