python-14クラスのプロパティの読み書きメンバー関数の再ロード継承
3964 ワード
@propertyプロパティアクセラレータ
読み書き属性
プロパティコンストラクタsetter getterの指定
カスタムプロパティー
インスタンスメソッド
スタティツクメソッド
クラスメソッド
クラスのメソッド
メソッドの再ロード
継承
class Person:
def __init__(self,name):
self.__name = name
@property
def info(self):
return self.__name
>>> p = Person("tom")
>>> print(p.info)
tom
!
読み書き属性
class Person:
def __init__(self,name):
self.__name = name
@property
def info(self):
return self.__name
@info.setter
def info(self,val):
self.__name = value
@info.getter
def info(self):
return self.__name
@info.deleter
def info(self):
del self.__name
p = Person("Bob") # B,
p.name = "Alice" # A
print(p.info)
プロパティコンストラクタsetter getterの指定
class Person:
def __init__(self,name):
self.__name = name
def getName(self):
return self.__name
def setName(self,value):
self.__name = value
def delName(self):
del self.__name
name = property(getName,setName,delName," name ")
p = Person("Bob")
print(p.name)
カスタムプロパティー
class C1:
pass
o = C1();
o.name = "Alice"
print(o.name)
:
Alice
======================================================
:
class C1:
pass
o = C1();
o.name = "Alice"
print(o.__dict__)
:
{'name': 'Alice'}
, Object
__getattr__ #
__getattribute__ #
__setattr__
__delattr__
インスタンスメソッド
def (self,[ ])
class Person:
def say_hi(self,name):
self.name = name
print("I am ",self.name )
o = Person();
o.say_hi("Alice")
:
I am Alice
self
スタティツクメソッド
@staticmethod
def ([ ]):
self self
class Person:
@staticmethod
def info(c):
return c
print(Person.info(3))
3
クラスメソッド
,
@classmethod
def (cls,[ ])
cls
class Foo:
classname = "Foo"
def __init__(self,name):
self.name = name
def f1(self):
print(self.name)
@staticmethod
def f2():
print("static")
@classmethod
def f3(cls):
print(cls.classname)
f = Foo("zhong")
f.f1()
Foo.f2()
Foo.f3()
zhong
static
Foo
クラスのメソッド
class Methods:
def publicMethod(self):
print(" ")
def __privateMethod(self):
print(" ")
def publicMethod2(self):
self.__privateMethod()
m = Methods();
m.publicMethod()
m._Methods__privateMethod()
class Methods:
def publicMethod(self):
print(" ")
def __privateMethod(self):
print(" ")
def publicMethod2(self):
self.__privateMethod()
m = Methods();
Methods.publicMethod(m)
#
Methods._Methods__privateMethod(m)
メソッドの再ロード
1.
class Person:
def say_hi(self,name):
print("hello I am " ,self.name)
def say_hi(self,name,age):
print("hello I am{0} age{1}",format(name,age))
2. :
class Person:
def say_hi(self,name):
print("hello I am " ,self.name)
def say_hi(self,name,age):
print('hello I am {0}, age {1}'.format(name,age))
p = Person()
p.say_hi('Tom',23)
p.say_hi('Tom')
hello I am Tom, age 23
Traceback (most recent call last):
File "D:/Program Files/Python36/test.py", line 9, in
p.say_hi('Tom')
TypeError: say_hi() missing 1 required positional argument: 'age'
継承
python
java :extends
python :
class ( 1, 2, 3,.........)
Eg:
class Person(object)