面向对象补充之方法

一、静态方法 @staticemethod      只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性。实例:
class Dog(object):
    ‘‘‘这个类是描述狗这个对象的‘‘‘

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

    @staticmethod #实际上跟类没什么关系了,只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性
    def eat(self):
        print("%s is eating %s" %(self.name,‘d‘))

d=Dog(‘doggie‘)
d.eat()

  返回:

在类的动态方法前面加上了“@staticmethod”之后,这个动态方法就已经和类没有什么关系,self不会自动传入。

二、类方法 @classmethod      只能访问类变量,不能访问实例变量实例:
class Dog(object):
    ‘‘‘这个类是描述狗这个对象的‘‘‘
    n=‘我不是实例变量‘

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

    @classmethod  #只能访问类变量,不能访问实例变量
    def p(self):
        print(‘我是类变量,%s‘%self.n)   #注意,此处只能调用类变量,传入的变量一定要写成self.var的格式。

    def eat(self):
        print(‘%s is eating...‘%self.name)

d=Dog(‘doggie‘)
d.eat()
d.p()    #没有被@classmethod的方法可以正常调用实例变量。

  返回:

如果上面实例中的d.eat()也被“@classmethod”方法,那么则会返回下面的错误:


三、属性方法 @property    把一个方法变成一个静态属性
class Dog(object):
    ‘‘‘这个类是描述狗这个对象的‘‘‘

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

    @property
    def eat(self):
        print(‘%s is eating...‘%self.name)

d=Dog(‘doggie‘)
d.eat

  返回:

注意:由于“@property”方法已经把d.eat方法变成了一个静态属性,如果没有“@property”方法,执行d.eat,不会调用执行d.eat方法;但由于“@property”将d.eat方法转变为一个静态属性,则不能通过d.eat()调用,会返回“TypeError: ‘NoneType‘ object is not callable”。

如果被装饰的方法中不需要传入参数,则可以通过d.eat执行。

时间: 2024-11-10 16:55:02

面向对象补充之方法的相关文章

面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射

一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func(self): pass def __str__(self): return "f1" obj = Foo() print(obj,type(obj)) # f1 <class '__main__.Foo'> 2.__doc__ 能将类的注释文档显示出来 class Foo(o

php面向对象补充

面向对象补充 __tostring的方法 class Ren{ public $name; public function __tostring(){ return "这是人类,有成员变量name代表名称"; } } $r = new Ren(); echo $r; 自动调用tostring方法. 克隆对象的方法 class Ren{    public $name;        public function __tostring(){        return "这是

附录A培训实习生-面向对象基础(3):方法重载

就上一篇代码而言,你如果写Cat cat = new Cat();会直接报错错误 : 1       “Cat”方法没有采用“0”个参数的重载 E:\大话设计模式学习\BigDesignPatterns\附录A培训实习生之面向对象基础\动物运动会\AnimalGames\Form1.cs       20     23     AnimalGames 原因就是必要给小猫起名字.如果当真需要不起名字也要生出小猫来,可以采用方法重载. 方法重载提供了创建同名的多个方法的能力,但这些方法需使用不同的参

面向对象的思维方法

我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭,因为我早以习惯用C来编写程序,很欣赏C的简洁性和高效性,喜欢C简练而表达能力丰富的风格,特别忍受不了Java运行起来慢吞吞的速度,相对冗长的代码,而且一个很简单的事情,要写好多类,一个类调用一个类,心里的抵触情绪很强. 我对Java的面向对象的特性琢磨良久,自认为有所领悟,也开始有意识的运用OOP风格来写程序,然而还是经常会觉得不知道应该怎样提炼类,面对一个具体的问题的时候,会觉得脑子里千头万绪的,

JavaScript面向对象-静态方法-私有方法-公有方法-特权方法,学习

var baseClass= function(){ function show(){//私有方法 alert("访问私有方法"); } function showName(){ alert(this.name); } this.showw = function (){//特权方法 showName(); } } //静态方法 baseClass.showStatic = function(){ alert("访问静态方法"); } //公有方法 baseClass

面向对象的开发方法(总结)

面向对象分为面向对象的分析(OOA),面向对象的设计(OOD)和面向对象的程序设计(OOP). OOA的是利用抽象构造问题的对象模型 OOD是设计对象和对象之间的关系,如层次和集成:对象之间的通信方式,例如消息.对OOA的结果进行细化,使其可以被OOP接收 OOP指对系统功能的编码 面向对象是当前主流的开发方法,拥有很多不同的分支体系, 如OMT(对象建模技术),OOSE(面向对象的软件工程)和booch方法所同意为的统一建模语言.除此之外,还有caod/yourdon方法 1.基本概念 对象,

JAVA 面向对象补充[toString方法和equals方法]

一.toString  方法 这里的toString  和 C#的To string 是两回事. JAVA中to string : Object类中都有一个to string() 方法,创建的每一个类都会继承这个方法,返回一个对象的String 表示. 代码: 注释代码后结果: 取消注释后结果: 二.equals方法

Python 面向对象-------补充

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

面向对象,绑定方法与异常处理(七)

1.1 继承与派生 1.1.1 什么是继承     是一种新建类的方式,新建的类称为子类,子类会遗传父类的属性,可以减少代码冗余     在python中,子类(派生类)可以继承一个或者多个父类(基类,超类)   python中类的继承分为:单继承和多继承 class Parent1: #定义父类 pass class Parent2(object): #定义父类 pass class Sub1(Parent1): ##单继承,基类是Parent1,派生类是Sub1 pass class Sub