1.类方法就是类中的方法,它属于类,可以通过类名来调用,也可以通过对象名来调用

2.类方法的表示是通过@classmethod装饰器来标识的,并且类方法里面自带类本身对象参数cls

3.静态方法也是类中的方法,属于类,可以通过类名调用,也可以通过对象名调用

4.静态方法的表示是通过@staticmethod装饰器标识的,不带参数,这也是它与类方法的区别

5.类方法和静态方法都不依赖对象,因为他们可以通过类名来调用,但也可以通过对象名来调用

class Dog:
def __init__(self,nickname):
self.nickname = nickname
def run(self):
print('{}在院子里面跑来跑去!'.format(self.nickname))
@classmethod #通过@classmethod修饰器标识
def test(cls):#带参数类本身参数,指向类cls
print('这是类方法')
@staticmethod#通过@staticmethod修饰器标识
def test_1():#无参数
print('这是静态方法')
dog = Dog('大黄')
dog.run()#结果为大黄在院子里面跑来跑去!
Dog.test() #通过类调用类方法,结果为这是类方法
Dof.test_1() #通过类调用静态方法,结果为这是类方法
dog.test() #通过对象调用类方法,结果为这是静态方法
dog.test_1() #通过对象调用静态方法,结果为这是静态方法

6.魔术方法,就是一种特殊的方法,一般通过__XXX__()这样的形式来标识

7.主要的魔术方法有五种:__init__(),__new__(),__call__,__del__(),__str__()

重点的是:__init__():初始化对象,__str__():输出与对象名相关的信息

需要了解的是:__new__():为对象名开辟内存空间,__call__,将对象当做函数使用,定义该方法并通过对象名()来调用,__del__():删除变量的引用,引用共用的是同一内存空间

class Person:
def __init__(self,name,age):#初始化变量
self.name = name
self.age = age
def __str__(self):#返回字符串,并且可以通过+连接字符串,作用是:输出与对象名相关的信息
return '{}今年{}岁!'.format(self.name,self.age)
p = Person('张三',20)#初始化对象并赋值
p.__str__()#结果为张三今年20岁!

8.私有化:好处是外部不能随意改变类中的属性,并且可以设置属性条件

9.通过设置__属性名来标识这是一个私有属性

10.通过set方法修改私有化属性,通过get方法获得私有化属性

class Person:
def init(self,__name,__age,__score):
self.__name = name
self.__age = age
self.__score = score
def __str__(self):
return '{}今年{}岁,成绩是{}分!'.format(self.__name,self.__age,self.__score)
def setAge(self,age):#通过set方法修改私有化属性的值
if age > 18:#设置属性条件
self.__age = age
else:
print('无法修改!')
def getAge(self)#通过get方法获得私有化属性的值
return self.__age
p = Person('李四',21,99)
p.__str__() #结果为李四今年21岁,成绩是99分!
p.__score = 90 #无法修改,因为该属性已被私有化
p.setAge(25)
p.getAge() #结果为25
p.__str__() #结果为李四今年25岁,成绩是99分!