静态方法,类方法,属性方法

1.静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。相当于类的工具包。

class Dog(object):
    def __init__(self,name):
        self.name=name
    @staticmethod  #实际上跟类没什么关系了,相当于一个独立的函数。
    def eat(self,food):
        print("%s is eating %s"%(self.name,food))

    def drink(self,food):
        print("%s is drinking %s"%(self.name,food))

d1=Dog("Lily")
d1.drink("Cooola")  #drink正常执行
d1.eat("baozi") #静态方法

运行结果:

Traceback (most recent call last):
  File "<encoding error>", line 13, in <module>
TypeError: eat() missing 1 required positional argument: ‘food‘
Lily is drinking Cooola

2.类方法只能访问类变量,不能访问实例变量。

class Dog(object):
    n=123
    def __init__(self,name):
        self.name=name
    @classmethod  #类方法,被修饰的下列函数只能访问类变量,不能访问实例变量。
    def eat(self,food):
        print("类变量%s" % self.n)
        print("%s is eating %s"%(self.name,food))

    def drink(self,food):
        print("%s is drinking %s"%(self.name,food))

d1=Dog("Lily")
d1.drink("Cooola")  #drink正常执行
d1.eat("baozi") #类方法

运行结果:

Lily is drinking Cooola
类变量123
Traceback (most recent call last):
  File "<encoding error>", line 15, in <module>
  File "<encoding error>", line 8, in eat
AttributeError: type object ‘Dog‘ has no attribute ‘name‘

3.属性方法

把一个方法变成一个静态属性。隐藏实现细节。就不能加()调用了。给属性方法赋值

class Dog(object):

    def __init__(self,name):
        self.name=name
        self.__food=None

    @property  #属性方法
    def eat(self):
        print("%s is eating %s"%(self.name,self.__food))

    @eat.setter
    def eat(self,food):
        print("set to food:",food)
        self.__food=food

d=Dog("Lily")
d.eat
d.eat="baozi" #属性方法
d.eat

运行结果:

Lily is eating None
set to food: baozi
Lily is eating baozi

4.属性方法在实例中不能以del d.eat 的方式删除。删除方法如下:

class Dog(object):

    def __init__(self,name):
        self.name=name
        self.__food=None

    @property  #把一个方法变成属性
    def eat(self):
        print("%s is eating %s"%(self.name,self.__food))

    @eat.setter  #修改它
    def eat(self,food):
        print("set to food:",food)
        self.__food=food

    @eat.deleter  #删除它
    def eat(self):
        del self.__food
        print("删除完毕")

d=Dog("Lily")
d.eat
d.eat="baozi" #属性方法
d.eat
del d.eat
d.eat

运行结果:

Lily is eating None
set to food: baozi
Lily is eating baozi
删除完毕
Traceback (most recent call last):
  File "<encoding error>", line 26, in <module>
  File "<encoding error>", line 9, in eat
AttributeError: ‘Dog‘ object has no attribute ‘_Dog__food‘
时间: 2024-10-20 20:13:53

静态方法,类方法,属性方法的相关文章

python静态方法类方法属性方法

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量: 3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法. 静态方法 @staticmethod    def staticmd():        print '静态方法 @classmetho

类的各种自带方法,静态方法,属性方法,类方法等

#coding=utf-8 class Dog(object): ''' 类的描述 ''' def __init__(self,name): self.name = name self.__food = None @staticmethod #实际上跟类没什么关系,单纯的函数,但是必须通过类名来调用 def eat(food): print ('%s is eating %s'%('xiaohuang',food)) @classmethod #类方法,只能访问类变量,不能访问实例变量 def

day7 静太方法 类方法 属性方法 反射 导常

类方法 1 '''是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法 2 ,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数, 3 但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问.''' 4 5 lass People(object): 6 country = 'china' 7 8 #类方法,用classmethod来进行修饰 9 @classmethod

静态方法@staticmethod 属性方法@property

多态 接口重用, 一种接口,多种实现 静态方法@staticmethod 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性类方法@classmethod 只能访问类变量,不能访问实例变量 属性方法@property 把一个方法变成一个静态属性给参数赋值要重新定义一个同名函数,并且前面加@属性名.setter import os# os.system()# os.mkdir() class Dog(object): def __init__(self,name): self.n

面向对象【day08】:静态方法、类方法、属性方法

本节内容 概述 静态方法 类方法 属性方法 总结 一.概述 前面我们已经讲解了关于类的很多东西,今天讲讲类的另外的特性:静态方法(staticmethod).类方法(classmethod).属性方法(property) 二.静态方法 2.1 定义 说明:在方法名前加上@staticmethod装饰器,表示此方法为静态方法 1 2 3 4 5 6 7 8 class Dog(object):     def __init__(self,name):         self.name = nam

python学习笔记之面向对象中的静态方法、类方法、属性方法总结

静态方法 类方法 属性方法 一.静态方法 可以利用@staticmethod装饰器把一个方法变成一个静态方法.静态方法不可以方法实例变量或者类变量,也就是说不可以使用self.属性这样子调用实例属性了.其实静态方法就和类本身没什么关系了,它和类 唯一的关联就是需要通过类名来调用这个方法. 错误调用方式: class Dog(object): def __init__(self,name): self.name = name @staticmethod #把eat方法变为静态方法 def eat(

python第三十三天----静态方法、类方法、属性方法

@staticmethod 装饰后,类中的方法转成静态方法 1 class a: 2 3 @staticmethod 4 def b(self): 5 print('') 静态方法不可以访问实例变量或类变量,相当于类中的工具包.如os,  system 等 import的模块一般 @classmethod装饰后,类中的方法转成类方法,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量 1 class b(object): 2 name='aa' 3 @classmethod 4

Python之路 - 属性方法,类方法,静态方法

本章内容 属性方法 类方法 静态方法 属性方法 属性方法就是通过使用装饰器 @property , 将一个方法变成一个静态属性 , 于是我们就可以通过访问属性 , 来或得一个方法的返回值 1 from urllib.request import urlopen 2 class Web_page: 3 def __init__(self, url): 4 self.url = url 5 self.__content = None 6 # 将content方法变成属性 7 @property 8

静态方法、类方法、属性方法

一.静态方法 1.1.定义  在类中的方法前面通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法 class Person(object): def __init__(self, name): self.name = name @staticmethod def speak(): print('someone is speaking chinese.') # 静态方法在类中也不需要传入 self参数 1.2.静态方法的特性 静态方法是不能访问实例变量和类变量的 class P