私有属性
# 私有属性不能被继承,只能在当前类的内部被调用
class Person:
def __init__(self,name,age,sex):
self.name = name
#私有属性__age只能在当前类中使用
self.__age = age
# 使用了property相当于使用了get方法
# get方法
@property
def age(self):
return self.__age
# set方法
@age.setter
def age(self,new_age):
# 在添加的时候进行判断,如果年龄在15-35之间才会修改
if new_age in range(15,36)
self.__age= new_age
# 由于我们使用了@property装饰器,和age.setter装饰器,所以我们能直接用age可以访问到__age属性
p = Person("宝强",18)
print(p.name,p.age)# 此处的p.age,能直接访问到__age属性
p.age=18# 修改__age的值为18
p.age=10# 由于10不在15-35之间所以不能修改
print(p.age)# 输出为18
继承
# object类是所有类的父类
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print("吃饭")
def sleep(self):
print("睡觉")
# 子类
class Man(Person):
def __init__(self,name,age,sex):
super().__init__(name,age)
self.sex = sex
def play_game(self):
print("吃鸡")
m = Man("宝强",30,"男")
print(id(m))
print(m.name,m.age)
m.eat()
类属性和对象属性
class Person:
# name为类属性,所有的对象都可以调用,
name = "宝强"
# family2为引用类型,然后我们使用对象更改family2时所有对象的family2都会修改
family2 = ["爸爸","妈妈","哥哥"]
weight = 100
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
self.family = ["爸爸","妈妈","妹妹"]
p = Person("强东",40,"男")
print(p.weight)# 打印出weight为100
p.weight=200# 此处是在__init__里面新建了一个weight为200,但是类属性weight没有改变
print(Person.weight) # 打印出类属性为100,可以被类直接调用
print(p.family2)#此处打印出类属性["爸爸","妈妈","哥哥"]
p.family2.append("姑姑")
print(Person.family2)# 打印出["爸爸","妈妈","哥哥","姑姑"]
类方法
class Person:
def __init(self,name):
self.name = name
def run(self):
print("跑步")
# 使用@classmethon装饰的方法是类方法
@classmethod
def eat(cls):
print(cls is Person) # True
print("吃饭")
#静态方法:里面既不能使用对象属性,也不使用类属性或其他的方法
@staticmethod
def sleep():
print("睡觉")
p = Person("范冰冰")
Person.eat()# 推荐这样来调用类方法
p.eat()
类中的特殊属性
class A:
pass
class B(A):
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def run(self):
print("run")
b=B("张雨欣",20,"女")
print(B.__name__)# 得到类名
print(b.__dict__)# 得到一个字典{'name':"张雨欣",'age':30,'sex':"女"}
print(B.__bases__)# (class '__main'__.A>,)
限制属性__slots__参数
# 限制属性
class Iphone:
__slots__=("color","type")
def __init__(self,color,type,size):
self.color=color
self.type=type
self.size=size
iphone9 = Iphone("骚红色","iphone9","6.1")
print(iphone9.color)
print(iphone9.type)
#未在__slots__中定义,不能在外部调用
print(iphone9.size)