'''
类的定义与使用:
1.基于class关键字实现对类的定义。如果类中没有任何东西,可以用pass代替
2.类具备有方法和属性:
属性:其实就是变量。单独使用叫做变量,在类中使用叫做属性。
方法:单独封装的叫做函数。在类中封装叫做方法
在类之中定义的方法,默认都会有self参数存在。self表示实例化对象自己。包含有self参数
的也叫做实例化方法。必须通过实例化对象进行调用。
类的静态方法,不需要通过self来实现调用,也就是不需要实例化,可以直接调用。
类中的属性无法通过实例化对象直接进行修改。
类的调用:
类默认都是基于实例化的行为来实现调用。如果要调用类中的属性或者方法,默认只能通过实例化对象来嗲用
类的方法和属性的调用都是基于名称来实现的。通过类名或者对象名加上.来进行获取。区别在于属性没有(),方法有()
类的构造方法:
每个类默认都有自己的构造方法,你可以不定义,也可以自定义。
构造方法可以帮助我们在实例化操作时,初始化我们的对象。
类只有一个构造方法,基于__init__(self)定义。
类中定义的方法和属性的作用域只在当前类中,出了类,除非是实例化对象或者类名,否则无法被调用
'''
# 类的示例
class Dog:
# 属性示例
attr_01 = '毛发'
attr_02 = '尖牙'
# 构造方法的定义:主要用于对类进行实例化时,特定的内容的初始化行为
# def __init__(self, name):
# self.name = name # self.name相当于实例化对象的属性name
# 方法示例
def eat(self):
print('饿了就吃饭')
def walk(self):
print('出门就跑')
self.eat() # 方法中调用方法,也是通过self.来调用
def info(self):
# print('狗叫' + self.name) # 方法调用类属性通过self.来进行调用
print('狗叫')
@staticmethod # 静态方法需要添加该装饰器
def sleep(): # 静态方法不需要self参数
print('安静睡觉')
# 实例化对象
# dog = Dog('三') #Dog()创建一个实例化对象,赋值给变量dog
# dog.eat() #类中方法的调用
# print(dog.attr_01) #类中属性的调用
# dog.sleep() #实例化对象可以调用静态方法
# Dog.sleep() #通过类名也可以直接调用静态方法。
# print(dog.name)
# dog.attr_01 = '金色的毛发' #修改实例化属性,只会对当前被修改对象有效,对其余对象和类本身无效
# print(dog.attr_01) #实例化对象属性
# print(Dog.attr_01) #类属性
# Dog.attr_01 = '红色的毛发' #修改类属性,会对所有实例化对象以及类本身都有效
# print(dog.attr_01)
# print(Dog.attr_01)
# 实例化的误区:此处的三个dog对象,都不是同一个对象。时三个不同的对象。
Dog().eat() #创建一个Dog实例化对象,然后调用eat方法
Dog().walk() #创建一个Dog实例化对象,然后调用walk方法
Dog().info() #创建一个Dog实例化对象,然后调用info方法
#这是同一个对象嗲用三个不同的方法
dog = Dog()
dog.eat()
dog.walk()
dog.info()