精华内容
下载资源
问答
  • 今天学习了,python的静态方法和类成员方法,通过网上的资料和书上的讲解说说自己的理解:如有错误还望纠正我一下,谢谢 类成员: 类由两部分组成: 一个是定义的变量,一个是定义的方法。 关于变量 ...

    今天学习了,python的静态方法和类成员方法,通过网上的资料和书上的讲解说说自己的理解:如有错误还望纠正我一下,谢谢


    类成员:

    类由两部分组成:

    一个是定义的变量,一个是定义的方法。


    关于变量

    其中定义的变量叫类的成员变量,作用域为整个类,可以叫做类的全局变量。

    在方法中定义绑定的self对象的变量(又叫做对象的属性),这个可以叫做局部变量。


    关于方法

    目前遇到的方法大概就四种:

    1. 构造方法


    构造方法也有self的参数,绑定到实例对象上,绑定到实例对象上,自然也能访问实例对象的属性(变量)构造方法与普通方法的区别在于,构造方法在对象创建之后会立即调用,__init__(self),这个初始化的方法就是这个构造方法最好的理解


    2. 静态方法


    静态方法没有(self)这个参数,不绑定到对象上面。能够被类本身直接调用,重点来了!划重点啦~~大笑

    静态方法无法访问实例的变量(也就是对象的属性),也无法访问类的全局变量(类的属性),相当于一个独立的方法,更好的理解就是,我这个方法只是放在类里面,跟类本身并无关系。


    3.类的成员方法


    类成员方法在定义的时候需要定义名为cls的参数,类似于self,类的成员方法可以让类的对象直接调用,cls参数自动绑定到类,它可以访问类的属性,但是无妨访问类的对象(实例)的属性。


    4.一般方法


    一般方法就简单啦~一般方法它有self的参数,意为绑定到这个实例对象上,所以也就可以访问对象是已有的属性。也可以访问类的全局变量


    举例子说明以上问题。

    class MyClass:
        val1 = 'Value 1'
    
        def __init__(self):
            self.val2 = 'Value 2'
    
        def normal(self):
            print(self.val2, self.val1)
    
        @staticmethod
        def staticmd():
            print('静态方法,无法访问val1和val2')
    
        @classmethod
        def classmd(cls):
            print('类方法.类:' + str(cls) + '的val1:' + cls.val1 + ',无法访问val2的值\n'+'下面尝试访问Value2'+cls.val2)
    
    mc = MyClass()
    mc.staticmd()
    mc.classmd()
    mc.normal()
    
    分析一波:

    1. mc = Myclass( ),调用Myclass这个类给mc,或者专业点说,构建Myclass这个类的实例


    2. mc.staticmd( ),调用类的静态方法,结果:静态方法,无法访问val1和val2。这个静态方法,又没有cls的参数,有没有self这个参数,它凭啥能访问实例对象的属性和类的属性呢?对吧?


    3. mc.classmd(),调用类的成员方法,结果:类方法.类:<class '__main__.MyClass'>的val1:Value 1,无法访问val2的值,看看看!可以得到value1,访问类的全局变量(类的属性)成功了!后来我又加了,尝试访问vlaue2这个对象的属性,Attribute Error,没有这个属性


    4. mc.normal( ),调用一般方法,结果:Value 2 Value 1。因为一开始的mc = Myclass( )已经进行了构造方法的初始化,这个实例对象有、vlaue2这个属性了,同样也有了Myclass类的属性。当然可以输出

    展开全文
  • 本文给大家分享python关于反射和类的特殊成员方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
  • 反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员dir([obj]):调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是...

    反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员

    dir([obj]):

    调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。

    hasattr(obj, attr):

    这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。

    getattr(obj, attr):

    调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为'bar',则返回obj.bar。

    setattr(obj, attr, val):

    调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为'bar',则相当于obj.bar = val。

    __doc__ 查看尖的描述信息

    __module__表示当前操作的对象所在的模块

    __class__表示当前操作的对象所属的类

    __init__构造方法 通过类创建对象自动执行

    __del__析构方法,当前对象在内存中被释放自动斩妖执行

    __call__对象后面加括号触发执行

    __dict__查看类或对象中的成员

    __str__如果一个类中定义了此方法,那么打印此类对象时,输出此方法的返回值

    __getitem__当类中定义了一个字典的属性成员,可以获取

    __setitem__设置修改类中字典的数据

    __delitem__删除 类中字典的数据

    __metalass__其用来表示该类由 谁 来实例化创建

    __new__触发 __init__创建实例

    原文链接:http://www.cnblogs.com/zfquan/p/7520106.html?utm_source=tuicool&utm_medium=referral

    展开全文
  • 面试题16 关于实例成员和类成员区别考题题干下面关于实例成员的说法,哪些是正确的?A.实例成员也被称为实例变量B.实例成员属于类成员C.实例成员隶属于实例,但不隶属于整个类D.实例成员包括实例变量和实例方法E...

    面试题16  关于实例成员和类成员区别

    考题题干

    下面关于实例成员的说法,哪些是正确的?

    A.实例成员也被称为实例变量

    B.实例成员属于类成员

    C.实例成员隶属于实例,但不隶属于整个类

    D.实例成员包括实例变量和实例方法

    E.实例成员变量就是静态变量

    试题分析

    这道题主要考查什么是实例成员?什么是类成员?两者之间有着怎样的关系?又有着怎样的区别?

    1.实例成员

    实例成员包括实例成员变量和实例成员方法,实例成员变量(对象的字段)和方法(对象的方法)是隶属于对象的,实例变量的值代表了该对象的状态,实例成员方法代表了该对象的行为。只有创建了对象之后才能访问实例成员变量和实例成员方法,通过"对象名.变量名(方法名)"的方式可以访问实例成员,代码如下:public class NameClass {

    Stringname="Lily";

    intage=12;

    public void print(){

    System.out.println("姓名:");

    System.out.println("年龄:");

    }

    public static void main(String[] args){

    NameClassnc=newNameClass();

    nc.print();

    System.out.println(nc.age+" "+nc.name);

    }

    }

    在这个程序中name和age就是实例成员变量,而print()方法就是实例成员方法。因为在static main()方法中是通过创建NameClass类的对象nc来访问的。

    2.类成员

    类成员(静态成员)需要用关键字static标识,类成员包括类成员变量和类成员方法,类成员是隶属于类的,意思是说通过类名可以直接访问类成员变量或调用类成员方法,即使没有创建对象,也能够引用类成员,当然类成员也可以通过对象引用。它既可以通过"对象名.变量名"方式访问,也可以通过"类名.变量名"的方式访问。它们是完全等价的。代码如下:

    public class BB {

    private static intnum=20;

    private static Stringname="vivi";

    public void call() {

    BB.print();

    new BB().print();

    System.out.println(BB.name + "," + BB.num);

    }

    public static void print() {

    System.out.println("Hellow China");

    }

    }

    在这个程序中num和name就是类成员变量,而print()方法和call()方法就是类成员方法,因为任何的方法中都可以通过类名.变量名(BB.name)和对象名.方法名(new BB().print())访问。

    下面列出成员的相关解释,供大家参考学习,如图2.20所示。成员名称及其说明如表2.1所示。

    a169cdf1e1b6487a37823cc14bf651c0.png

    图2.20  成员结构图

    表2.1  成员名称及其说明

    成员名称

    成员含义

    实例成员

    指的是对象的实例变量和实例方法,只能通过对象

    引用加以访问或者调用

    实例变量

    实例变量只有在类的实例化时才分配的字段,即当

    创建类对象的时候,系统才分配这个字段,也叫做非静态字段

    实例方法

    一种隶属于类实例的方法,隶属于相同类的

    所有对象分享方法的实现

    静态成员

    指的是隶属于类的静态方法和静态变量,静态成员可

    以通过类名或者对象引用加以访问和调用

    静态变量

    一种载入类时就需要进行分配的字段,静态变量隶属于类,

    但是不属于该类的任何对象,所以成为静态字段或者类变量

    静态方法

    一种隶属于类但是不属于该类任何对象的方法,叫做类方法,

    同样可以通过类名或者对象引用加以访问和调用

    参考答案

    CD

    【责任编辑:云霞 TEL:(010)68476606】

    点赞 0

    展开全文
  • 反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员 class Dog(object): def __init__(self,name): self.name = name def eat(self): print("%s ...

    反射

    反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员

    class Dog(object):
        def __init__(self,name):
            self.name = name
        def eat(self):
            print("%s is eating..."%self.name)
    
    def run():
        print("runing ....")
    
    d = Dog("lucy")
    
    choise=input("请输入要调用的方法:")
    if hasattr(d,choise):#判断一个对象是否有对应的字符串方法
        func=getattr(d,choise)#根据字符串去获取对象里相应的方法或属性的内存地址对象
        func()
    else:
        setattr(d,choise,run)#setattr(obj,y,fun)相当于obj.y=fun,fun可以是属性或者方法
        v=getattr(d,choise)
        print(v)

    dir([obj]):
    调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。

    hasattr(obj, attr): 
    这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。

    getattr(obj, attr): 
    调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为'bar',则返回obj.bar。

    setattr(obj, attr, val):

    调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为'bar',则相当于obj.bar = val。

     

     

    __doc__ 查看尖的描述信息

     

    __module__表示当前操作的对象所在的模块

     

    __class__表示当前操作的对象所属的类

     

    __init__构造方法 通过类创建对象自动执行

     

    __del__析构方法,当前对象在内存中被释放自动斩妖执行

     

    __call__对象后面加括号触发执行

     

    __dict__查看类或对象中的成员

     

    __str__如果一个类中定义了此方法,那么打印此类对象时,输出此方法的返回值 

     

    __getitem__当类中定义了一个字典的属性成员,可以获取

     

    __setitem__设置修改类中字典的数据

     

    __delitem__删除 类中字典的数据

     

    __metalass__其用来表示该类由 谁 来实例化创建

     

    __new__触发 __init__创建实例

     

     

     

    from lib.ss import a
    #示例类 dog
    class doges(object):
        """类的描述信息"""
        def __init__(self,name,food):
            self.name=name
            self.food=food
            self.data={}#定义一个类的字典
        def __call__(self, *args, **kwargs):#对象后面加括号解执行
            print(*args)
        def __str__(self):#默认输出返回值
            return self.name
        def __getitem__(self):#可以获取类的的字典
            return self.data
        def __setitem__(self, key, value):#可以设置类的的字典
            self.data[key]=value
        def __delitem__(self, key):#可以删除类的字典的内容
            del self.data[key]
    dog=doges('xxx','iii')
    print(dog.__doc__)
    b=a()
    print(b.__module__)#操作的对象的那个模块
    print(dog.__class__)#当前操作的对象的类是什么
    dog('111')#
    print(doges.__dict__)#查看类或对象的成员  类只打印类的成员不打印对象的成员
    print(dog.__dict__)#查看类或对象的成员 对象只打印对象的成员不打印类的成员
    print(dog)#打印 __str__的返回值
    print(dog.__str__())#打印返回值
    
    dog['1']=1000#触发.__setitem__()
    dog['2']=1000#触发.__setitem__()
    print(dog.__getitem__())
    print(dog.__delitem__('1'))#删除类中字典
    print(dog.__getitem__())
    
    #设置类的特殊方法
    def func(self):
        print('hello word%s'%self.name)
        print()
    
    def __init__(self,name,age):
        self.name=name
        self.age=age
    ##type参数 1:类名 2.类的基类 3.类的成员,字典格式
    CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
    
    cat=CAT('喵喵',3)
    cat.func()
    print(cat.name,cat.age)

     

    转载于:https://www.cnblogs.com/zfquan/p/7520106.html

    展开全文
  • 关于成员方法

    2014-02-23 19:56:16
    成员有实例成员和类成员,实例成员包括实例变量和实例方法,static关键字有类变量和类方法,类变量又称静态变量被该类的所有实例对象所共享,类方法又称为静态方法,方法声明钱加上static关键字。对类成员的调用既...
  • 请问大侠,如果是本访问另外一个方法和成员,是怎么访问的,要NEW吗 访问另一个方法和成员 有这个方面的总结吗?好像有的要创建对象,有的不要, 还有如果是继承,内部,它的访问有哪些区别 还有...
  • 关于类方法里不能调用实例方法/成员变量的论述 参考《疯狂Java讲义》 首先要明白无论调用成员变量还是方法,都需要主调(主语调用者),其格式为:主调.方法/成员变量 别看我们平时可以直接使用方法名/变量名,...
  • 反射:反射就是通过获取Class字节码文件对象/Classs的对象,获取该字节码文件对象中的成员变量,构造方法,和成员方法 Field: 简称成员变量 (Field 提供有关或接口的单个字段的信息,以及对它的动态访问权限...
  • 反射反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员class Dog(object):def __init__(self,name):self.name = namedef eat(self):print("%s is eating......
  • 详解Python中的静态方法与类成员方法这篇文章主要介绍了关于 Python 中静态方法与成员的相关资料,文中通过示例代码给大家详细总结了两者在语法使用上的区别,有需要的朋友可以参考借鉴,下面来一起看看吧。...
  • 看了几篇博客关于一般内部不能有static修饰的变量,在这里记录一下。问题几种解释如下:1.“if you're going to have a static method, the whole inner class has to be static. Without doing...
  • static方法是中的一个成员方法,属于整个,即使不用创建任何对象也可以直接调用! 静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。 静态方法和静态变量创建后始终使用同...
  •  类方法不能调用本身类中的成员方法和成员变量,  对象方法可以调用本身类中的成员方法和成员变量 3.声明也不同  类方法开头时'+'声明  对象方法是用'-'声明 4.定义情况(什么时候定义对象方法,什么时候...
  • 这里将分别讲解类模板和非类模板中两种成员模板的定义方法:类内定义和类外定义。最简单的定义方法即在类定义里面定义。方法如下:1)类模板中成员模板的类体内定义方法:templateclass QQQ{public: template//成员...
  • 主要介绍了关于Python中静态方法类成员的相关资料,文中通过示例代码给大家详细总结了两者在语法使用上的区别,有需要的朋友可以参考借鉴,下面来一起看看吧。
  • c++类关于类静态成员方法和类的普通成员和方法的关系以及区别 下面把静态属性(方法)称为类的属性(方法) ,普通属性(方法)称为对象的属性(方法) 调用类成员和属性的几种方法 /* 调用类成员和属性的几种方法: 类名...
  • 1.如果中没有构造方法,系统会自动生成一个,如果定义了构造方法,系统则不再赠送。 2.构造方法没有返回值。 3.构造方法是可以重载的,但是里面的参数不可以是相同的。 列如: public class zzzz { public
  • 不仅如此,final还可以让你控制你的成员方法或者是一个是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或缺的地位,也是学习Java时必须要知道掌握的关键字之一。final成员当你在中定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,152
精华内容 860
关键字:

关于成员方法和类方法