python添加屬性值
1. 如何用python 給CAD添加擴展屬性
2012可以安裝,但是需要修改安裝文件。
2. Python如果一個父類已經實例化了,現在想新建一個子類,給父類的這一個實例添加兩個屬性,如何實現
class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
class worker(People):
def __init__(self,name,age,salary):
super(worker,self).__init__(name,age)
self.salary = salary
tom = People("Tom", 22)
print type(tom).__name__
#not a safe way, but no new object
tom.__class__=worker
print type(tom).__name__
tom.salary = 250
print tom.salary
#safe way, but create a new object
workerTom = worker("Tom", 22, 200)
tom.__dict__ = workerTom.__dict__
print type(tom).__name__
print tom.salary
3. python 類屬性為類時,如何進行賦值
因為b.name[0]
=
'zhang'修改的是類屬性,類屬性是全局的,所有的實例共享,如果想私有化,可以添加
def
__init__(
self
):
self.name
=
list(
self.name
)
就可以了.
4. python類里邊給方法添加屬性進列表
往列表裡添加多個值可以用 extend():
classUser():
def__init__(self,first_name,last_name):
self.first=first_name
self.last=last_name
deftitl(self):
list=[]
#list.append(self.first_name)
#list.append(self.last_name)
list.extend([self.first,self.last])
print(list)
me=User('ssx','xing')
print(me.first+','+me.last)
me.titl()
5. python 新手: 已存在的object添加屬性!
for obj in obj_list:
obj.c = None #直接設置屬性即可
6. python怎麼給子類添加屬性
#請修改一下子類IceCreamStand中的代碼,代碼如下:
class IceCreamStand(Restaurant):
def __init__(self,name,cuisine,num_serverd,flavours = "sweet"):#重點修改行
super(IceCreamStand, self).__init__(name,cuisine,num_serverd)
self.flavours = flavours
def show_flavours(self):
print("Ice is "+self.flavours+" .")
b = IceCreamStand("冰工廠","Haagen-Dazs(哈根達斯)",25,"chocolate")
b.describe()
b.show_flavours()
7. 談談python中類屬性和類實例的屬性的區別
一般來說,在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
8. Python創建空DataFrame及添加行數據
在pandas中創建一個空DataFrame的方法,類似於創建了一個空字典(dict)。
例如:zhuanempty = pandas.DataFrame({"name":"","age":"","sex":""})
想要向empty中插入一行數據,shu可以用同樣的方法。
(1)首先,要創建一個DataFrame。要注意,在這里需加入index屬性,new = pandas.DataFrame({"name":"","age":"","sex":""},index=["0"])。
(2)然後,開始插值。ignore_index=True,可以幫助忽略index,自動遞增。
empty.append(new,ignore_index=True)
(3)最重要的,賦值給empty.
empty = empty.append(new,ignore_index=True)
否則,數據始終沒有寫入。
9. 為什麼python中基本類型如 str int 的對象不能動態添加屬性
比較簡單的方式是把str和int理解為「原始數據類型」,其結構是不可以修改的。理由是,str和int是python中提供的標准數據類型,大家已經對這種數據類型的性質和用法有了普遍的共識和預定。如果硬要自己進行修改或者加上一些自定義的屬性,就很容易破壞這種「共識」,進而導致程序可讀性下降,甚至引入潛在的bug。
如果需要動態添加屬性,就自己去定義一個專門的class,並在注釋中寫清楚該class可能會具有的屬性,這樣就顯得很清楚。
10. 關於python動態添加屬性和方法的意義
通過對象的實例,在外部為其添加屬性,這種做法應該是很少見的。原因很簡單:破壞封裝。雖然Python可以做到,但並不代表隨意使用這種做法是妥當的。
添加的屬性可以和原有的組合使用的,有回答已經給出了例子。
我覺得有必要提一下self或者說方法的第一個參數是什麼。
需要注意的是,通過實例為類屬性賦值[7],會「遮蓋」類屬性。即,賦值只是為實例的屬性賦值,而未改動類的屬性。需要改動類屬性的話,應該使用類名的方式。
感興趣的話可以查查Python的Mixin,這是通過動態繼承添加屬性和方法的做法。