一、内置类属性
内置类属性:
__name__
__doc__
__dict__
__module__
__bases__
- 类.__name__:获取类的名字(字符串)
- 类.__doc__: 获取说明文档
- ①. 类.__dict__: 获取类中所有的类属性和对应的值, 以键值对的形式存到字典中
②. 对象.__dict__: 将对象的属性和对应的值, 转换成字典的元素(常用, 牢记)
- ①. 类.__dict__: 获取类中所有的类属性和对应的值, 以键值对的形式存到字典中
- 类.__module.__: 获取当前类所在的模块的名字(在运行的模块名会变成__main__)
- 类.__bases__: 获取当前类的父类名称
- 类.__bases__: 获取当前类的父类名称
二、私有化
- python中类中的属性和方法的私有化:直接在属性名或者方法名前加__(命名以'__'开头)
- 属性或者方法私有: 在外部不能直接使用, 可以在类的内部使用
- 私有化的原理: 在内部私有的名字前加了前缀'_类名'
class Person:
__number = 90 # 私有的类字段
def __init__(self, name='', age=0):
self.name = name
self.__age = age
def __show_age(self):
print(self.__age)
# 私有方法,只能在内部调用
def p(self):
self.__show_age()
if __name__ == '__main__':
p1 = Person('皮卡丘', 12)
p1.name = '胖丁'
p1.p()
# p1.age = 3
# print(p1.name, p1.__age)
print(Person.__dict__)
三、getter和setter
属性假的私有化: 声明对象属性的时候, 在属性名前面加一个'_',来告诉别人这个属性不可以直接使用, 要通过getter和setter来获取和修改属性的值
1. getter :
@property
def 属性名(去掉下划线)(self):
return 返回值
如果在获取对象的某个属性前需要对其做一些处理而不是直接呈现, 就需要给属性添加getter
2. setter : 给属性赋值
一个属性必须要有getter, 才能添加setter。
@属性名(去掉下划线).setter
def 属性名(去掉下划线)(self, 变量名):
给带下划线的属性赋值
如果在给对象的某个属性赋值之前对其做一些处理而不是直接呈现, 就需要给属性添加setter
class Student:
"""学生类"""
def __init__(self, name, score, age):
# 声明属性的时候,前面加一个下划线, 是为了告诉别人这个属性不能直接使用
self._name = name
self._score = score
self._age = age
# 给属性_name添加setter
@property
def name(self):
return self._name
# 给属性_name添加setter
@name.setter
def name(self, value):
self._name = value
@property
def score(self):
return self._score
@score.setter
def score(self, value):
self._score = value
return self._score
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value > 150 or value <= 0:
print('请输入合理的值')
# 抛出异常
# raise ValueError
else:
self._age = value
return self._age
if __name__ == '__main__':
stu1 = Student('①', 90, 15)
# 不添加getter和setter
stu1._name = '派大星'
print(stu1._name)
# 添加getter和setter
stu1.name = '张三'
print(stu1.name)
stu1.age = 200
stu1.age = 20
print(stu1.age)
派大星
张三
请输入合理的值
20
四、类的继承
子类: 继承者
父类(超类): 被继承者
1. 怎么继承
python中类是可以继承的, 并且支持多继承
class 类名(父类):
'''类的说明文档'''
属性
方法
说明: python中所有的类默认继承python的基类: object
2. 能继承哪些内容
继承: 直接拥有父类的属性和方法(继承后父类的属性和方法不受影响)
a. 对象的属性和方法, 类的字段和方法, 静态方法都可以继承(私有的继承无意义--不能继承)
b. __slots__不会被继承
c. getter和setter会被继承
class Person:
number = 56
def __init__(self):
self.name = ''
self.age = 0
self.gender = '男'
self.__length = 1.8
def eat(self):
print('我王境泽就是饿死,死外边,从这里跳下去,也不会吃你们一口饭')
print('嗯 真香!')
@classmethod
def get_number(cls):
print('%.f' % cls.number)
class Student(Person):
pass
if __name__ == '__main__':
stu = Student()
stu.eat()
print(stu)
这里并没有在Student类中写任何函数, 输出的是父类(Person里面的内容)
我王境泽就是饿死,死外边,从这里跳下去,也不会吃你们一口饭
嗯 真香!
网友评论