类方法,静态方法,魔术方法,私有化
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分!