python学习笔记--类属性、类方法,静态方法

"""
python的类属性,就是python中将一个类,作为类对象,类属性可以通过类对象访问
author:一叶扁舟

"""

class Dog:
    # 共有的类属性
    name = "狗"
    # 私有的类属性
    __age = 12

    def __init__(self,color,sex):
        self.color = color
        self.sex = sex

    # 实例方法,函数的第一个参数写self
    def  eat(self):
        print("%s正在吃。。。。",self.name)

    # 类方法,函数里面的第一个参数写cls
    @classmethod
    def  run(cls):
        print("%s 今年%d岁了"%(cls.name,cls.__age))

    #  静态方法,函数可以不写参数
    @staticmethod
    def sleep():
        print("狗正在睡觉。。。。。")

dog = Dog("白色","公的")
# 正确
print(dog.name)
# 正确
print(Dog.name)
# 错误
# print(dog.__age)
#错误
# print(Dog.__age)

# 实例对象取出实例属性和类属性
print(dog.name)
print(dog.color)
print(dog.sex)

# 类对象无法实例属性
# print(Dog.color)
# print(Dog.sex)

"""
总结
如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,
这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,
即引用的是实例属性,除非删除了该实例属性。
"""


print("-"*120)

# 类方法可以用实例对象访问也可以用类对象访问
print(dog.run())
print(Dog.run())

"""
总结
从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),
不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用
"""

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值