面向对象4-类方法和属性方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象4-类方法和属性方法相关的知识,希望对你有一定的参考价值。
类方法:类方法只能访问类的公有属性,不能访问对象属性。
1 class person(object): 2 country = ‘CHINA‘ 3 age = 28 4 5 def __init__(self,name ,id): 6 self.name = name 7 self.id = id 8 def test(self): 9 print(‘%s age is %d‘%(self.name, self.age) ) 10 @classmethod #类方法装饰器,被装饰的方法只能使用类内的公有属性 11 def test1(self): 12 print(‘zsq1 age is %d‘%(self.age) ) 13 14 @classmethod #类方法装饰器,被装饰的方法可以直接在调用时传参数 15 def test2(self, name1): 16 print(‘%s age is %d‘%(name1, self.age) ) 17 18 p1 = person(‘zsq‘, 123456) 19 p1.test() 20 21 p2 = person(‘zsq1‘, 123456) 22 p2.test1() 23 p2.test2(‘zsq2‘)
属性方法:属性方法可以不加括号进行调用,但是不能传递参数。可以使用setter装饰器使用私有属性使用赋值方法间接传递参数。属性方法不支持直接删除,需要使用delter装饰器来装饰删除方法,删除方法内需要删除setter装饰器装饰方法内用于传递删除的私有属性。
1 __author__ = ‘zhang‘ 2 class person(object): 3 country = ‘CHINA‘ 4 age = 28 5 6 def __init__(self,name ,id): 7 self.name = name 8 self.id = id 9 10 @property #属性方法装饰器,被装饰的方法不用使用()就能调用;但是不能传递参数。 11 def test(self): 12 print(‘%s age is %d‘%(self.name, self.age) ) 13 #如果属性方法需要传递参数可使用下面方法 14 @property 15 def test2(self): 16 name1 = self.__name1 17 print(‘%s age is %d‘%(name1, self.age) ) 18 @test2.setter 19 def test2(self, name1): 20 self.__name1 = name1 21 @test2.deleter #类属性的删除方法,默认类是不能删除的;先调用该方法,然后再删除属性方法 22 def test2(self): 23 del self.__name1 24 print(‘删除方法‘) 25 26 p1 = person(‘zsq‘, 123456) 27 p1.test #属性方法调用,不用加括号也不能传递参数 28 29 p2 = person(‘zsq1‘, 12345) 30 p2.test2 = ‘zsq2‘ #使用私有属性将参数以赋值形式传递给属性方法 31 p2.test2 #再次调用时参数已经传递到属性方法内 32 del p2.test2 #删除属性方法 33 p2.test2 #删除后在调用属性方法提示类不存在私有属性“_person__name1”
以上是关于面向对象4-类方法和属性方法的主要内容,如果未能解决你的问题,请参考以下文章
Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法
python 面向对象专题:私有成员类方法静态方法属性isinstance/issubclass