python之Class属性定义和访问

1、python中类定义:

类的声明和函数的声明形式是差不多的,开始都是关键字+自定义名称
定义实例变量:可以在定义方法的时候直接定义,也可以使用实例来定义
可以使用dir(ClassName) ClassName.__dict__来查看有哪些类属性

      class ClassName:
      'the discription of this class'#这个是类文档说明字符串
          foo='static attribute'#在定义类的时候直接定义属性,这个属性是类属性,也就是说是静态的.
          def aMethod(self,parameter):#这里定义的方法是实例的方法,也就是跟对象实例绑定的
          'discription of this method'#这是方法说明字符串
              ClassName.foo='changed static attribute'#访问静态属性可以使用ClassName.foo,
                                                   #当然也可以使用self.foo来当做实例变量来访问
             self.foo='instance attribute'#访问实例属性

实例1静态变量:

 fo=10  #这个是全局变量
class ClassName(object):
    """docstring for ClassName"""
    fo=1
    def foun(self2):
        print(ClassName.fo)#输出1
    def __init__(self):
        global fo     #使用global可以访问到全局变量
        fo+=1         #访问全局变量,python中的全局变量就是文件中直接定义的变量与函数和类的位置关系都是并列的
        print(fo)     #输出11
        ClassName.fo+=1#类变量加一
# instance2=ClassName()
# print(instance2.foo)
print(ClassName().fo)#输出2
print(ClassName().fo)#输出3
x=60   #这个是全局变量
def func():
    global x
    print(x)
    x=90
    print(x)

实例2实例变量:

class ClassName(object):
    """docstring for ClassName"""
    fo=1
    def __init__(self):
        self.fo+=1#实例变量加一,类变量并没有改变
print(ClassName().fo)#输出2
print(ClassName().fo)#输出2
print(ClassName.fo)#输出1,这里访问类变量并没有因为self.fo+=1而改变
print(ClassName.fo)#输出1

实例3实例变量:

class ClassName(object):
    """docstring for ClassName"""
    def __init__(self):
        self.fo=1#实例变量
instance1=ClassName()
instance1.foo='instance attribute,can\'t be accessed by class'
print(dir(ClassName))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
并没有foo和fo

实例4定义实例变量:

class ClassName(object):
    """docstring for ClassName"""
    def __init__(self):
        self.fo=1            #定义类时定义实例变量
    def fun(self):
        attribute1='instance1'   #定义类时定义实例变量
instance1=ClassName()
instance1.foo='instance attribute,can\'t be accessed by class'  #使用实例定义实例变量
print(ClassName.__dict__)
输出:
{'__dict__': <attribute '__dict__' of 'ClassName' objects>, '__weakref__': <attribute '__weakref__' of 'ClassName' objects>, '__doc__': 'docstring for ClassName', '__module__': '__main__', '__init__': <function ClassName.__init__ at 0x035194F8>, 'fun': <function ClassName.fun at 0x035195D0>}

print(ClassName.attribute1)
发生错误:
AttributeError: type object 'ClassName' has no attribute 'attribute1'

2、如何得知类的属性有哪些?
使用内建函数dir(class)
使用类的字典属性:class._ _ dict _ _#这里会返回一个字典,
3、一些特殊的类属性:

C.__name__ #类C的名字(字符串)
C.__doc__ #类C的文档字符串
C.__bases__ #类C的所有父类构成的元组
C.__dict__ #类C的属性
C.__module__ #类C定义所在的模块(1.5 版本新增)
C.__class__ 实例C对应的类(仅新式类中)#注意这里指的是实例

4、类定义所在模块
类定义在所执行的文件中是,这时模块名为__main__,

classA.py:
      class Classname:
          pass
      instance=ClassName()
      print(type(instance))
输出:<class '__main__.ClassName'>

----------

classB.py
     from classA import Classname
     instance=Classname()
     print(type(instance))
输出:<class 'classA.ClassName'>
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python定义class(类)的关键字为class,其后需要紧跟着类名,并使用冒号(:)表示类定义的开始。紧接着类名的下一行通常是类的说明(docstring)。 在类定义中,可以定义类的属性和方法。属性即类的变量,可以是类变量(在所有实例中共享)或实例变量(每个实例单独拥有)。方法即类的函数,可以是类方法(与类绑定,可以通过类名调用)或实例方法(与实例绑定,只能通过实例调用)。 实现一个最基本的类,需要在类的定义中实现__init__(构造函数)方法。__init__方法用于初始化类实例的属性。在__init__方法中,需要定义一个self参数,它在类的实例化过程中被自动传递,并代表实例本身。通过self可以实现对实例变量的访问。 为了方便类外部使用类的方法,Python提供了@property修饰符,它可以将一个方法转换成一个只读属性,这样外部代码就可以通过调用属性的方式访问方法的返回值了。 例如,实现一个简单的人类(Person)类: ```python class Person: def __init__(self, name): self.name = name @property def hello(self): return f"Hello, my name is {self.name}." ``` 上述代码定义了一个Person类,其中__init__方法用于初始化Person实例的name属性,hello方法用于返回Person实例的问候语。使用@property修饰符将hello方法转换成了只读属性。这样,就可以通过以下方式使用这个类: ```python p = Person("Tom") print(p.hello) # 输出 "Hello, my name is Tom." ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值