类的三种方法

本文深入讲解Python中的类、对象以及类方法、静态方法的使用,包括类属性和实例属性的区别、调用规则以及何时定义静态方法和类方法。通过示例代码展示了如何创建对象、访问属性和调用方法,同时探讨了类方法和静态方法在类结构中的作用。
摘要由CSDN通过智能技术生成
#字典
#1.标志 {}
#2.关键字 dict
#3.字典的数据存储格式 key:value   键值对
#4.字典里的value可以是任何类型的数据个数
#5.取值方式  根据key取值
class BoyFriend:
    #类属性:    放在类中的变量
    height=175
    weight=130
    money='500万'

    #类方法:    写在类中的函数
    def cooking(self):#会做饭   self占位
        print(self.height+"男朋友会做饭")     #self 可以引用类的属性
        # print(self)

    def earm(self):#会挣钱
        print('男票月薪3万')

    @classmethod
    def swimming(cls):
        print('男票会游泳')

    @staticmethod
    def sing():
        print("还要会唱歌")

#创建实例/对象 具体的一个例子  类名()
bf=BoyFriend()  #bf是实例,可以调用类中的任意属性和方法
#print(bf)
print(bf.money)
print(bf.cooking())

#实例具有类里面的所有属性和方法的使用权限


#类里面的方法分三种
#1.self  实例方法   只能实例来调用
#例如:
bf=BoyFriend()    #实例 隐藏式的传递
t.cooking()
BoyFriend.cooking(t)   #显示的传递,不建议使用

#2.类方法
# @classmethod    装饰器
#cls
BoyFriend.swimming()
bf=BoyFriend()
bf.swimming()

#3.静态方法
#@staticmethod
BoyFriend.sing()
bf.sing()


###相同点:
#实例方法self、类方法cls、静态方法(普通方法) 实例和类名都可以调用

###不同点:
#静态方法和类方法不可以调用类里的属性值,如果要参数,需要自己传参数


###什么时候去定义静态方法和类方法:
#当你的某个函数与其他的类函数、类属性没有半毛关系时,就可以定义静态和类方法
"""
实例属性(只有对象可以访问):self.XXX(类定义中) 或者  对象.XXX 
类属性(类和实例都可以访问):类名.XX  或者 对象.XX  -- 所有实例的共性。

1) 实例属性和类属性的优先级?同名会不会覆盖?-------
对于对象而言,自己有就用自己的,自己没有,就用类的。自己和类都没有,就报错。

2) 类属性修改? -- 类方法(所有实例的共性)  cls - 代表当前类
   @classmethod
   def 类方法名(cls):
        方法实现

   与实例方法的区别:
    实例方法:self    对象调用
     类方法:cls   @classmethod    类和对象都可以调用。一般是类去调用
    静态方法:没有一定要传self或者cls   @staticmethod  类和对象都可以调用

3) 静态方法 -- 
    普通函数 - 没有必定要传的参数-类或者对象。只不过呢,它是放在类里面。
    @staticmethod
    def 函数名称():
        函数实现

实例方法?实例方法之间互调用?-- 不要,会"死锁"

"""
import random


def get_weather():
    weather = ["晴天", "小雪", "阴天", "小雨", "雷阵雨", "起风"]
    index = random.randint(0, len(weather) - 1)
    return weather[index]


# 抽象描述 - 定义
class Person:
    # 类属性 = 值
    color = "黄种人"  # 常量

    @classmethod  # 装饰器的语法糖 - java叫注解
    def update_class_color(cls):
        cls.color = "全世界的人"
        print(f"类的color为:{cls.color}")

    def __init__(self, name, sex, city, age=18):
        self.my_name = name  # 给对象添加name属性,并给它赋值。
        self.my_sex = sex
        self.my_city = city
        self.my_age = age
        self.color = "中国人"  # 对象的color属性

    def update_color(self):
        self.color = "中国汉族"
        print("对象的color为:{}".format(self.color))

    def play_something_by_weather(self):
        # 根据天气去判断玩什么
        today_w = self.get_weather()
        pass

    @staticmethod
    def get_weather():   
        weather = ["晴天", "小雪", "阴天", "小雨", "雷阵雨", "起风"]
        index = random.randint(0, len(weather) - 1)
        return weather[index]

    def find_another_friend(self, has_friend, food=None):
        """
        年龄 > 18 ,以及 没有对象的,就找对象。否则就不找。
        :param has_friend: True或者False.True表示有对象。False表示没有对象
        :return:
        """
        if self.my_age >= 18 and has_friend is False:
            print("{} 需要找对象".format(self.my_name))
            # 告诉别人我喜欢吃什么
            self.eat(food)
        else:
            print("没有资格找对象。")


# 类名来访问类属性
print(Person.color)
Person.update_class_color()
print("==================")

# 对象来访问类属性
tz = Person("财子", "男", "北京")
print(tz.color)
tz.update_color()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值