#字典
#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()