当前位置:首页 » 编程语言 » python查看类的属性

python查看类的属性

发布时间: 2023-02-16 13:47:50

python 类中的私有属性有哪些

类的私有属性:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问
在类内部的方法中使用时 self.__private_attrs。

类的方法:
在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

类的私有方法 :
__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。
在类的内部调用 self.__private_methods

实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0 # 公开变量

def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount

counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount # 报错,实例不能访问私有变量

Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName 访问属性,将如下代码替换以上代码的最后一行代码:
…………………….
print counter._JustCounter__secretCount

这样就可以访问私有属性了

② Python 获取类属性

通常情况下,我们在类对象中定义的属性都会设置访问权限,外部程序无法直接获取,防止恶意的修改,当属性被设置为私有属性后,外部程序该如何访问呢?

例:使用普通方法访问私有属性

例:使用property方法访问私有属性

property()方法接收两个参数,第一个参数为获取属性需要调用的实例方法名,第二个参数为设置属性需要调用的实例方法名,返回值就设置为需要设置、获取的属性名。

当执行到实例.属性时,就会调用获取实例属性的方法,当执行到实例.属性 = xxx时,就会调用设置实例属性的方法。

例:使用@property/@xxx.setter装饰器访问私有属性

③ python 一个类访问另一个类中的属性

你那个是定义的是实例属性,非类属性。如下定义类属性,即可按你的方式访问。
class A:
B = 1

④ python 如何查看object有哪些属性值

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。

⑤ python中 如何把类的方法变成类的属性

那你首先要定义属性。你的代码里都没定义attribute啊。

⑥ python 如何根据一个对象的属性值查询该对象其他某个属性值

在 Chrom 类中新增一个类函数,遍历存储列表并返回匹配的对象

大概写了个样例

⑦ Python __dict__属性:查看对象内部所有属性名和属性值组成的字典

在 Python 类的内部,无论是类属性还是实例属性,都是以字典的形式进行存储的,其中属性名作为键,而值作为该键对应的值。

为了方便用户查看类中包含哪些属性,Python 类提供了 dict 属性。需要注意的一点是,该属性可以用类名或者类的实例对象来调用,用类名直接调用 dict ,会输出该由类中所有类属性组成的字典;而使用类的实例对象调用 dict ,会输出由类中所有实例属性组成的字典。

举个例子:

程序输出结果为:

{' mole ': ' main ', 'a': 1, 'b': 2, ' init ': <function CLanguage. init at 0x0000022C69833E18>, ' dict ': <attribute ' dict ' of 'CLanguage' objects>, ' weakref ': <attribute ' weakref ' of 'CLanguage' objects>, ' doc ': None}
{'name': 'C语言中文网', 'add': ' http://c.biancheng.net' }

不仅如此,对于具有继承关系的父类和子类来说,父类有自己的 dict ,同样子类也有自己的 dict ,它不会包含父类的 dict 。例如:

运行结果为:

{' mole ': ' main ', 'a': 1, 'b': 2, ' init ': <function CLanguage. init at 0x000001721A853E18>, ' dict ': <attribute ' dict ' of 'CLanguage' objects>, ' weakref ': <attribute ' weakref ' of 'CLanguage' objects>, ' doc ': None}
{' mole ': ' main ', 'c': 1, 'd': 2, ' init ': <function CL. init at 0x000001721CD15510>, ' doc ': None}
{'name': 'C语言中文网', 'add': ' http://c.biancheng.net' }
{'na': 'Python教程', 'ad': ' http://c.biancheng.net/python' }

除此之外,借助由类实例对象调用 dict 属性获取的字典,可以使用字典的方式对其中实例属性的值进行修改,例如:

程序运行结果为:

{'name': 'C语言中文网', 'add': ' http://c.biancheng.net' }
Python教程

⑧ python如何判断self.属性是否存在

一般来说,在Python中,类实例属性的访问规则算是比较直观的。

但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此。

在这里,我们需要明白以下几个地方:

1.Python是一门动态语言,任何实体都可以动态地添加或删除属性。
2.一个类定义了一个作用域。
3.类实例也引入了一个作用域,这与相应类定义的作用域不同。
4.在类实例中查找属性的时候,首先在实例自己的作用域中查找,如果没有找到,则再在类定义的作用域中查找。
5.在对类实例属性进行赋值的时候,实际上会在类实例定义的作用域中添加一个属性(如果还不存在的话),并不会影响到相应类中定义的同名属性。

下面看一个例子,加深对上述几点的理解:

复制代码
代码如下:

class A:
cls_i = 0
cls_j
= {}
def __init__(self):
self.instance_i =
0
self.instance_j =
{}

在这里,我们先定义类A的一个实例a,然后再看看类A的作用域和实例a的作用域中分别有什么:

复制代码
代码如下:

>>> a = A()
>>>
a.__dict__
{'instance_j': {}, 'instance_i': 0}
>>>
A.__dict__
{'__init__': , '__mole__': '__main__', 'cls_i': 0, 'cls_j': {},
'__doc__': None}

我们看到,a的作用域中有instance_i和instance_j,A的作用域中有cls_i和cls_j。

我们再来看看名字查找是如何发生的:

复制代码
代码如下:

>>> a.cls_i
0
>>>
a.instance_i
0

在查找cls_i的时候,实例a的作用域中是没有它的,却在A的作用域中找到了它;在查找instance_i的时候,直接可在a的作用域中找到它。

如果我们企图通过实例a来修改cls_i的值,那会怎样呢:

复制代码
代码如下:

>>> a.cls_i = 1
>>>
a.__dict__
{'instance_j': {}, 'cls_i': 1, 'instance_i': 0}
>>>
A.__dict__
{'__init__': , '__mole__': '__main__', 'cls_i': 0, 'cls_j': {},
'__doc__': None}

我们可以看到,a的作用域中多了一个cls_i属性,其值为1;同时,我们也注意到A作用域中的cls_i属性的值仍然为0;在这里,我们其实是增加了一个实例属性,并没有修改到类属性。

如果我们通过实例a操纵cls_j中的数据(注意不是cls_j本身),又会怎么样呢:

复制代码
代码如下:

>>> a.cls_j['a'] =
'a'
>>> a.__dict__
{'instance_j': {}, 'cls_i': 1, 'instance_i':
0}
>>> A.__dict__
{'__init__': , '__mole__': '__main__',
'cls_i': 0, 'cls_j': {'a': 'a'}, '__doc__': None}

我们可以看到a的作用域没有发生什么变化,但是A的作用域发生了一些变化,cls_j中的数据发生了变化。

实例的作用域发生变化,并不会影响到该类的其它实例,但是类的作用域发生变化,则会影响到该类的所有实例,包括在这之前创建的实例:

复制代码
代码如下:

>>> A.cls_k = 0

⑨ python中是否有类,其作用是

python中元类是类的类。类定义类的实例(即对象)的行为,而元类定义类的行为。类是元类的实例。虽然在Python中你可以对元类使用任意可调用对象(如Jerub演示),但是更好的方法是使其成为实际的类。type是Python中常见的元类。type它本身是一个类,并且是它自己的类型。你将无法type纯粹使用Python 重新创建类似的东西,但是Python有点作弊。要在Python中创建自己的元类,你实际上只想将其子类化type。元类最常用作类工厂。class执行该语句时,Python首先将class语句的主体作为普通代码块执行。生成的名称空间(字典)保留了将来类的属性。通过查看待定类的基类(继承了元类),待定类的__metaclass__属性(如果有)或__metaclass__全局变量来确定元类。然后使用该类的名称,基数和属性调用该元类以实例化它。但是,元类实际上定义了类的类型,而不仅仅是它的工厂,因此你可以使用它们做更多的事情。例如,你可以在元类上定义常规方法。这些元类方法就像类方法,因为它们可以在没有实例的情况下在类上调用,但是它们也不像类方法,因为它们不能在类的实例上被调用。type.__subclasses__()是type元类上方法的示例。你还可以定义正常的“魔力”的方法,如__add__,__iter__和__getattr__,执行或如何变化的类的行为。

⑩ python类中的 方法 属性分别什么意思

就比方说有一个类叫做car

这个类的属性可以有colorsizebrandpriceyear等描述性的东西

这个类的方法可以是runstopforwardbackward等执行性的东西

classcar:
#定义基本属性
color=''
size=0
brand=''
price=0
year=0

#定义构造方法
def__init__(self):
self.color=color
self.size=size
self.brand=brand
self.price=price
self.year=year
defrun(self):
print("thecarisrunning")
defstop(self):
print("thecarisstop")
defforward(self):
print("thecarisforward")
defbackward(self):
print("thecarisbackward")

#类调用

benz=car('red',1.8T,'Mercedes',400000,2016)
benz.run()
benz.stop()
benz.forward()
benz.backward()
热点内容
已上传附件 发布:2024-11-08 11:47:53 浏览:633
电脑配置都有哪些问题 发布:2024-11-08 11:15:29 浏览:727
新浪微博敏感词数据库 发布:2024-11-08 11:03:22 浏览:472
linux的终端软件 发布:2024-11-08 11:01:46 浏览:204
主机如何把密码关掉 发布:2024-11-08 10:36:25 浏览:720
安卓软件如何锁定 发布:2024-11-08 10:30:27 浏览:709
sql定时执行语句 发布:2024-11-08 10:29:36 浏览:673
迈锐宝xl值得入手哪个配置 发布:2024-11-08 10:14:13 浏览:634
寻欢加密 发布:2024-11-08 10:02:57 浏览:353
拼单源码 发布:2024-11-08 09:58:24 浏览:143