PythonはDay 08の特殊な属性と特殊な方法を学びます
特殊な属性と特殊な方法
(一)特殊属性 __dict__メソッド:クラスオブジェクトまたはインスタンスオブジェクトにバインドされたすべてのプロパティとメソッドを取得する辞書
(二)特殊な方法 1.len()メソッド:書き換える_len__()メソッドは、内蔵関数len()のパラメータをカスタムタイプ とすることができる. 2.add()メソッド:書き換え_によりadd__()メソッドでは、カスタムオブジェクトに「+」機能 を持たせることができます. 3.新()メソッド:オブジェクト を作成する 4.Init()メソッド:作成オブジェクトの初期化
二、クラスの付与とコピー 1.変数の付与操作:2つの変数を形成するだけで、実際には同じオブジェクト を実行する. 2.浅いコピー:Pythonコピーは一般的に浅いコピーであり、コピー時にオブジェクトに含まれるサブオブジェクトの内容はコピーされません.したがって、ソースオブジェクトとコピーオブジェクトは、同じオブジェクト を参照する. 3.深度コピー:copyモジュールのdeepcopy()関数を使用して、再帰コピーオブジェクトに含まれるサブオブジェクトを再帰コピーします.ソースオブジェクトとコピーオブジェクトのすべてのサブオブジェクトも異なります.
(一)特殊属性
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,name,age):
self.name=name
self.age=age
# C
c=C('Jack',23)
print(c.__dict__) #
print(C.__dict__) #
print('-------------------------------------------')
print(c.__class__) #
print(C.__bases__) #C
print(C.__base__)
print(C.__mro__) #
print(A.__subclasses__())
(二)特殊な方法
a=20
b=45
c=a+b #
d=a.__add__(b) #65
print(c) #65
print(d) #65
class Student:
def __init__(self,name): #
self.name=name
def __add__(self, other): # __add__() ,
return self.name+other.name
#
stu1=Student(' ')
stu2=Student(' ')
s=stu1+stu2
#print(stu1+stu2) # ,
print(s) #
s=stu1.__add__(stu2) # stu1+stu2
print(s) #
class Student:
def __init__(self,name): #
self.name=name
def __add__(self, other): # __add__() ,
return self.name+other.name
def __len__(self,name):
return len(self.name) # __len__() ,
lst=[12,34,56,24]
print(len(lst)) # 4,len() ,
print(lst.__len__()) #4
print(len(stu1.name)) # __len__() :object of type 'Student' has no len()
# ‘ ’ 2
class Person:
def __init__(self, name, age):
print('__init__ ,self id {0}'.format(id(self)))
self.name = name
self.age = age
def __new__(cls, *args, **kwargs):
print('__new__ ,cls id {0}'.format(id(cls)))
obj=super().__new__(cls)
print(' id {0}'.format(id(obj)))
return obj
print('object id :{0}'.format(id(object)))
print('Person id {0}'.format(id(Person)))
# Person
p1=Person(' ',24)
print('p1 Person id :{0}'.format(id(p1)))
object id :1700574656
Person id 2653101470232
__new__ ,cls id 2653101470232
id 2653133666736
__init__ ,self id 2653133666736
p1 Person id :2653133666736
二、クラスの付与とコピー
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self,cpu,disk):
self.cpu=cpu
self.disk=disk
#(1)
cpu1=CPU()
cpu2=cpu1
print(cpu1)
print(cpu2)
#(2)
print('-------------------------')
disk=Disk() #
computer=Computer(cpu1,disk) #
#
import copy
computer2=copy.copy(computer)
print(computer,computer.cpu,computer.disk)
print(computer2,computer2.cpu,computer2.disk)
print('------------------------------')
#
computer3=copy.deepcopy(computer2)
print(computer2,computer2.cpu,computer2.disk)
print(computer3,computer3.cpu,computer3.disk)
<__main__.CPU object at 0x000001979060FF98>
<__main__.CPU object at 0x000001979060FF98>
-------------------------
<__main__.Computer object at 0x0000019790618080> <__main__.CPU object at 0x000001979060FF98> <__main__.Disk object at 0x00000197906180F0>
<__main__.Computer object at 0x0000019790618128> <__main__.CPU object at 0x000001979060FF98> <__main__.Disk object at 0x00000197906180F0>
------------------------------
<__main__.Computer object at 0x0000019790618128> <__main__.CPU object at 0x000001979060FF98> <__main__.Disk object at 0x00000197906180F0>
<__main__.Computer object at 0x0000019790618160> <__main__.CPU object at 0x0000019790618710> <__main__.Disk object at 0x0000019790626F60>
Process finished with exit code 0