Python 面向对象2
2018-08-01 本文已影响32人
Fizz翊
面向对象编程2
1 内置的类属性
内置类属性:python中每个类都拥有内置的类属性
__name__
__doc__
__dict__
__module__
__bases__
举例说明:
class Cat():
'''猫类'''
number = 0
def __init__(self,name = '',color = ''):
self.name = name
self.color = color
def run(self):
print('%s在跑'%self.name)
@staticmethod
def shout():
print('喵')
@classmethod
def get_number(cls):
print('猫的数量:%d' %cls.number)
cat1 = Cat('小花','white')
#1. 类.__name__ 获取类的名字(字符串)
print(Cat.__name__)
#2. 类.__doc__ 获取类的说明文档
print(Cat.__doc__)
#3. 类.__dict__ 获取类所有的类属性和类属性的值,以键值对的形式存到字典中
# 对象.__dict__ 将对象的所有属性和对应的值转换为字典的元素,
print(Cat.__dict__)
print(cat1.__dict__)
#4. 类.__module__ 获取当前类所在的模块的名字
print(Cat.__module__)
#4. 类.__bases__ 查看当前类的父类
print(Cat.__bases__)
2属性私有化
python中类的属性和方法的私有化:直接在属性名和方法名前加 _(命名的时候以‘—’开头)
属性或者方法私有:不能再外部直接使用,可以在类的内部使用
class Person:
'''人类'''
def __init__(self,name='',age = 0):
self.name = name
self.__age = age
def show_age(self):
print(self.__age)
def __run(self):
print('跑')
if __name__ == '__main__':
p1 = Person('张三',30)
print(p1.name)
p1.show_age()
3.getter和setter
属性假的私有化:声明对象属性的时候,在属性名前面加一个‘_’,用来告诉别人这个属性不可以直接使用
要通过getter和setter来获取属性的值和修改属性的值
1.getter:获取属性的值
格式:
def 属性名(self):
代码块
returen self._属性名
2.setter:给属性赋值
@属性名.setter
def 属性名(self,new_value):
代码块
Self._属性名 = new_value
ps:一个属性必须要有getter才能添加setter,但使用getter不一定必须要有setter
class Student:
'''学生类'''
def __init__(self,name ='',):
#声明属性的时候,前面加一个'_'是为了告诉别人这个属性不能直接使用
self._name = name
self._score = 0
self._age = 0
#给属性 _name 添加getter
@property
def name(self):
return self._name
@property
def score(self):
return self._score
#给属性 _name 添加setter
@name.setter
def name(self,name):
self._name = name
@score.setter
def score(self,score):
self._score = score
if __name__ == '__main__':
stu1 = Student()
stu1.name = '李四'
# stu1._name = '张三'
# print(stu1._name)
print(stu1.name)
stu1.score =10
print(stu1.score)
4.继承
4.1继承基础
python中类是可以继承的,并且支持多继承
语法格式:
class 类名(父类列表):
'''类的说明文档'''
属性
方法
python中所有的类默认继承为object
4.2可以继承的内容
继承:直接拥有父类的属性和方法(继承后父类的属性和方法依旧存在)
可以继承的内容:
a.对象的属性和方法
b.类的字段和类方法,静态方法(私有的继承无意义,即不能继承)
c.slots魔法不会被继承
d.getter和setter可以被继承
class Person:
def __init__(self):
self.name = ''
self.age = 0
self.sex = '男'
def eat(self):
print(self.name+'在吃饭')
class Student(Person):
pass
stu1 = Student()
stu1.name = '花'
print(stu1.name)
stu1.eat()