pythonでのクラスの学習:クラス属性、インスタンス属性_new__方法:シングルモード
4341 ワード
≪インスタンス・プロパティ|Instance Properties|oem_src≫:特定のインスタンス・オブジェクトと関係があります.
1つのインスタンスオブジェクトと別のインスタンスオブジェクトは属性を共有しません
≪クラス・プロパティ|Class Properties|ldap≫:クラス・プロパティが属するクラス・オブジェクト
複数のインスタンスオブジェクト間で同じクラス属性を共有し、クラス定義時に一度だけ定義します.
__new__()メソッド:作成完了、_init__()初期化完了
単一モードの作成
一度だけ初期化できます
1つのインスタンスオブジェクトと別のインスタンスオブジェクトは属性を共有しません
≪クラス・プロパティ|Class Properties|ldap≫:クラス・プロパティが属するクラス・オブジェクト
複数のインスタンスオブジェクト間で同じクラス属性を共有し、クラス定義時に一度だけ定義します.
#encoding=utf-8
#
class Base(object):
def test(self):
print("----base")
class A(Base):
def test(self):
print("-----A")
class B(Base):
def test(self):
print("----B")
class C(Base):
def test(self):
pass
class D(A,B):
def test(self):
print("----D")
class E(A,C):
def test(self):
pass
e=E()
e.test()
print(E.__mro__)
# .__mro__: C3 , E-A-C-Base, ,
# ,
# : ,
#python
# ,
class Attribute:
num=0 # ,
def __init__(self,new_name):#
self.name=new_name # , ,
Attribute.num+=1 #
@classmethod
def add_num(cls):# cls , ,
cls.num=100 #
@staticmethod
def printSome():
print("can print something")
a1=Attribute('property')
a1.add_num() # ,
Attribute.add_num()
# ,
Attribute.printSome() #
a1.printSome() # ,
# , (self), @classmethod, (cls)
#x @staticmethod,
#Attribute ,
# :
#
# :
# ,
# 、 、
__new__()メソッド:作成完了、_init__()初期化完了
#encoding=utf-8
#
#__new__ :__new__ cls, , python
#__new__ ,
#__init__ self, __new__ ,__init__ __new__
# ,__init__
# ,__new__ ,__init__ , ,
# __
class Teacher(object):
"""docstring for Teacher"""
def __init__(self):
self.arg = 1
def __del__(self):
print(" ")
def __str__(self):
print(" ")
def __new__(cls):# ,
print(" new ")
tea=Teacher() # ,__new__
# : new
#1 ;2 __init__() 3
# new , object __new__() , __new__() , ,
#
class Student(object):
"""docstring for Student"""
def __init__(self):
self.arg = 1
def __del__(self):
print(" ")
def __str__(self):
print(" ")
def __new__(cls):# ,
print(" new ")
object.__new__(cls)# __new__ , cls
print(" new ")
stu=Student()#1 __new__ 2 __init__, self 3
# C++ : , python , __new__ __init__
''' :
new
new
'''
単一モードの作成
#encoding=utf-8
# , , ,
class StudentA(object):
__instance=None# ,
def __new__(cls):
if cls.__instance==None:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
stu=StudentA()
一度だけ初期化できます
#encoding=utf-8
# , , ,
class StudentA(object):
__instance=None# ,
def __new__(cls,name):# __init__ ,
if cls.__instance==None:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self,name):
self.name=name
stu=StudentA("hummy")# __new__ , ,
print(id(stu))
print(stu.name)
stud=StudentA("bohy")
print(id(stud))
print(stud.name)
'''
18468592
hummy
18468592
bohy
'''
class StudentB(object):
__instance=None# ,
__initFlag=False
def __new__(cls,name):# __init__ ,
if cls.__instance==None:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self,name):
if StudentB.__initFlag==False:
StudentB.__initFlag=True
self.name=name
stu=StudentB("hummy")# __new__ , ,
print(id(stu))
print(stu.name)
stud=StudentB("bohy")
print(id(stud))
print(stud.name)
'''
18477128
hummy
18477128
hummy
'''