Python之类和对象【二】(补充:0-类属性和类方法-静态方法)

文章目录


前言

归纳Python中 类和对象里面类属性和类方法的访问方式,静态方法和实例方法/属性,类方法/属性的写法和调用。


一、类和对象的权限操作

访问权限:
类/对象的属性/方法,对象都可以访问。
(也就是:对象可以调用类方法和类属性,也可以调用对象自己的方法和属性)

修改权限:
实例方法修改实例属性、类方法修改类属性。
(也就是:各自修改自己的属性和方法)

二、类属性和类方法:

类属性:
    定义:直接在类名之后,通过 变量名 = 值  定义。
    访问:类/对象都可以访问。但是,对象不能更改类属性值。
    class By:
        LEVEL = 11
        BUG = 12
    print(By.LEVEL)

类属性最常用的场景就在selenium里面的By类,这个里面全部都是类属性。
 

类方法:
    @classmethod   
    def 方法名(cls):  # cls class的简称。
代码当前类本身
        pass

实例方法和类方法、静态方法有什么区别?

1、第一个参数:实例方法是self,类方法是cls,静态方法没有必传参数。 

2、类方法用@classmethod装饰。静态方法用@staticmethod装饰。

 3、实例方法,一定要有对象能访问。

       类方法,不需要对象直接类名访问,类和对象都可以访问

       静态方法,对象和类都可以访问。

静态方法:
     @staticmethod   
    def 方法名(): 
        pass
    普通函数,没有必传的参数。
    只是放在类中定义,通过类名/对象名调用。

举一个完整的例子:


# def static_action_func():
#     print("我是一个跟类和对象都没有啥关系的函数。仅仅是放在类内容,供送遣!")

# 创建一个类型出来了
# 定义类(不知道未来的对象是谁? - self就代表对象,拥有属性和行为)

class Dog:

    # 类属性
    category = "狗"

    # 类方法
    @classmethod
    def update_class_attr(cls):
        # 更改类属性。类名.属性名 = 值
        cls.category = "大狗狗"

    # 静态方法
    @staticmethod
    def static_action():
        print("我是一个跟类和对象都没有啥关系的函数。仅仅是放在类内容,供送遣!")

    # 魔术方法 - 不需要主动调用,在实例化对象的同时会自动调用。
    # 初始化函数、构造函数
    # 实例的属性,一般都是在__init__内部通过self.属性名 = 值
    # 其它的方法(参数第一个为self)当中可以直接通过self.属性名去访问。
    def __init__(self, kind, name, color, age=1):
        self.kind = kind  # 属性赋值
        self.name = name  # 属性赋值
        self.color = color  # 属性赋值
        self.age = age  # 属性赋值
        # sex = "公"


    # 狗的行为:吃
    def eat(self, food):
        print("{} 狗要吃 {}!!!".format(self.name, food))

    def drink(self):
        self.bark()
        print("狗要喝水了!!!")

    def bark(self):
        print("狗嗷嗷的叫!!!")
        print("注意警惕!!")

    # 实例方法改实例属性
    def update(self, new_name):
        self.name = new_name

if __name__ == '__main__':

    # 实例化类 =》 对象/实例
    # 对象名 = 类名()

    # 小小菲的狗 - 泰迪、棕色、summer、一岁、母的
    xxf_dog = Dog("泰迪", "summer", "棕色", 2)
    print("===========   类方法修改类属性   =================")
    print(xxf_dog.category)
    Dog.update_class_attr()
    print(xxf_dog.category)
    print("===========   类/对象  都可以访问静态方法   =================")
    Dog.static_action()
    xxf_dog.static_action()

    print("=========== 对象   访问实例属性/实例方法  =================")
    # # 调用实例方法
    # xxf_dog.eat("狗粮")
    # xxf_dog.drink()
    # # 访问实例属性
    # print(xxf_dog.color)
    # print(xxf_dog.kind)
    # print("=========== 对象/类   访问类属性  =================")
    # # 对象访问类属性
    # print(xxf_dog.category)
    # # 类名访问类属性
    # print(Dog.category)
    # print("=========== 对象/类   对象不能更改类属性的值,但是可以更改对象的属性值  =================")
    # # 对象修改 类同名属性
    # xxf_dog.category = "狗狗"
    # # 对象访问类属性
    # print("通过对象名,访问类的同名属性:", xxf_dog.category)
    #
    # # 类名访问类属性
    # print("通过类名,访问类属性:", Dog.category)
    # # 小基家的狗 - 串串、米白色、钱罐、1岁半
    # xj_dog = Dog("串串", "钱罐", "米白色", 1.5)
    # print(xj_dog.category)


总结

暂无

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值