python面向对象总结

私有属性

# 私有属性不能被继承,只能在当前类的内部被调用
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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值