6.Python基礎学習ノートday 6-対象
65176 ワード
6.Python基礎学習ノートday 6-対象
一、クラスとオブジェクト
二、構造関数、構造関数及びself
三、メンバー変数とクラス変数
四、属性と方法を動的に追加する
五、メンバーメソッドとクラスメソッド
六、パッケージ、継承とマルチステート
七、関数書き換えと演算子の再ロード
一、クラスとオブジェクト
'''
:
: , , ,
: , 。
1. ,
2. str,list, ,
。
:
/
/ /
'''
'''
:
class ():
class: python class
: 【 】
() (object)
: , 。
'''
'''
:
: ,
: ,
'''
二、構造関数、構造関数及びself
'''
def __init__(self):
pass
, 。
。
。
, self 。【self 】
:
.
. ( )
'''
class Person():
def __init__(self,name,sex,age,height,weight):
# print(name,sex,age,height,weight)
self.name = name
self.sex = sex
self.age = age
self.height = height
self.weight = weight
def eat(self):
print("eat",self)
print(" ")
def sleep(self):
print("%s "%self.name)
def say(self):
print("say hello")
if __name__ == '__main__':
per = Person("lili","girl",18,160,100)
print(per.name)
print(per.age)
print(per.height)
per.sleep()
'''
:
def __del__(self):
pass
, 。
( ):
1.
2. (del )
'''
import time
class Person():
def __init__(self,name):
self.name = name
print(" ")
def say(self):
print("say hello")
def __del__(self):
print(" 。。。")
if __name__ == '__main__':
per = Person("lili")
per.say()
del per
# while True:pass
time.sleep(10)
'''
1.self ?
【 】
2.self ?
self , self ,
。
3.self ?
self , , ,
。
'''
class Person():
def __init__(self,name):
self.name = name
print(" ")
def say(per,self):
print(self)
print("hello %s"%(per))
if __name__ == '__main__':
per = Person("lili")
print(Person)
print(per)
per.say(" ")
三、メンバー変数とクラス変数
'''
:
, , 【 】
, ,
。
:
.
: , 。
:
, self , 。
:
1.
2.
【 】
【 】
3.
,
4. , ,
, ,
5. , 【 】,
, 。
【 】
'''
class Person():
name = "lili"
age = 18
height = 160
print(" ",id(name)) # 35431568
def __init__(self,name=" ",age=20,sex="girl"):
self.name = name
self.age = age
self.sex = sex
if __name__ == '__main__':
per = Person()
print(per.height) # 160
per.height = 165
print(per.height) # 165
per2 = Person()
print(per2.height) # 160
Person.height = 170
per3 = Person()
print(per3.height) # 170
print(per.height) # 165
print(per.name) #
print(Person.name) # lili
四、属性と方法を動的に追加する
'''
, , ,
, 。
python , __slots__ 。
:__slots__ =() ,
。 。
'''
class Person():
__slots__ = ("name","age","eat")
def __init__(self,name,age=18):
self.name = name
self.age = age
def say(self):
print("say hello")
class Student:
__slots__ = ("name","age","sex","stuid","classid","eat","study")
def __init__(self,name,age):
self.name = name
self.age = age
def sleep(self):
print(" ...")
def eat():
print(" ")
if __name__ == '__main__':
stu = Student(" ",20)
print(stu.name)
stu.eat = eat
stu.eat()
# stu.height = 180
# print(stu.height)
# per = Person("lili")
# print(per.name)
# per.age = 20
# print(per.age)
# # per.age = 18
# # print(per.age)
# per.eat = eat
# per.eat()
五、メンバーメソッドとクラスメソッド
'''
/ :
1.
, ,
self, , ,
self, 。
, 。
2.
, , ,
@classmethod 。
, cls, ,
, 。
, ,
。
3.
, 。 @staticmethod
, , 。
'''
from datetime import datetime
class Person():
classname = "python1904"
@classmethod
def getclass(cls):
print("cls",cls)
print(" %s"%cls.classname)
def eat(self):
print(" ...")
@staticmethod
def welcome():
print('''
*************************
* *
*************************
''')
if __name__ == '__main__':
print(datetime.now())
# dt = datetime(2018,8,18,8,8,8)
# print(dt.now())
per = Person()
per.eat()
per.getclass()
Person.getclass()
print(per)
print(Person)
# per.welcome()
# Person.welcome()
# Person.eat()
'''
, , :
:
self【 】/ , 。
:
self/【 】/ , ,
。
:
, , ,
。
'''
六、パッケージ、継承とマルチステート
'''
:
,
:
: 。
: ,
, 。
:
: ,
:
@property : 。
@property getter , getter
,@property ,
@ .setter , setter 。
: 。
'''
from datetime import datetime
class Father():
def __init__(self,name,age,money):
self.name = name
self._age = age
self.__money = money
@property
def money(self):
return self.__money
@money.setter
def money(self,mon):
if mon < 10000000:
print(" ")
else:
self.__money = mon
if __name__ == '__main__':
father = Father(" ",56,100000000)
print(father.name)
print(father.money)
father.money = 20000000
print(father.money)
print(father._age)
# print(father.getMoney())
# father.setMoney(20000000)
# print(father.getMoney())
# print(father.__money)
# father.__money -= 100000
# print(father.__money)
'''
_ __ , .__
, ._ __ , 。
, 。
'''
class Father():
def __init__(self,name,age,money):
self.name = name
self.age = age
self.__money = money
@property
def money(self):
return self.__money
@money.setter
def money(self, money):
if money < 0:
print(" , !!")
else:
self.__money += money
if __name__ == '__main__':
fa = Father(" ",56,10000000)
print(fa.money)
print(fa._Father__money)
fa.money = 100
print(fa.money)
'''
__foo__ , , 。
__foo , , ,
_foo , , , 。
'''
'''
:
: ,
。
/ /
/
。
: , object , ,
object 。
'''
'''
python 。
: 。
:
class ( ):
: , object ,object 。
:
, 。
, __init__ , init
( ), init
super().__init__( )
【 init 】,
init , 。
, ,
。
'''
class Animal(object):
def __init__(self,name,pinzhong,sex,color):
self.name = name
self.pinzhong = pinzhong
self.__sex = sex
self.color = color
print(" ")
@property
def sex(self):
return self.__sex
@sex.setter
def sex(self,sex):
self.__sex = sex
def eat(self):
print(" ...")
def sleep(self):
print(" ")
class Cat(Animal):
def catchmouse(self):
print(" ...")
def mai(self):
print(" ...")
class Dog(Animal):
def kanmen(self):
print(" ...")
def faner(self):
print(" ...")
if __name__ == '__main__':
# cat = Cat(" "," "," "," ")
# print(cat.name)
# print(cat.pinzhong)
# print(cat.color)
# print(cat.sex)
# cat.sleep()
# cat.catchmouse()
# cat.mai()
# Ani = Animal(" "," "," "," ")
# Ani.mai()
dog = Dog(" "," "," "," ")
dog.eat()
dog.kanmen()
dog.faner()
'''
:
。
, ,
。
,
。
, 。
class ( 1, 2,...):
:() 。
:
:name sex money
:
:name sex facevalue
:
'''
class Father():
def __init__(self,name,sex,money):
self.name = name
self.sex = sex
self.money = money
print(" ")
def makemoney(self):
print(" ...")
def dapai(self):
print(" ...")
def smoke(self):
print(" ...")
def drink(self):
print(" ...")
class Mother():
def __init__(self,name,sex,facevalue):
self.name = name
self.sex = sex
self.facevalue = facevalue
print(" 。。。")
def spendmoney(self):
print(" ....")
def cooking(self):
print(" ...")
def xiyifu(self):
print(" ...")
def damajiang(self):
print(" ...")
def dapai(self):
print(" ...")
class Child(Mother,Father):
def __init__(self,name,sex,money,facevalue):
Mother.__init__(self,name,sex,facevalue)
Father.__init__(self,name,sex,money)
if __name__ == '__main__':
child = Child(" ","boy",100000,99)
print(child)
print(child.name)
print(child.sex)
print(child.money)
child.cooking()
child.damajiang()
child.makemoney()
child.spendmoney()
child.dapai()
print(child.facevalue)
'''
:
, 。
: , ,
: , ,
'''
'''
python , python 。
: , , , 。
, 。
isinstance(obj,type)
: 。
, True, False。
dir(obj)
: , 。
'''
class Animal():
def __init__(self,name):
self.name = name
@staticmethod
def run(ani):
print("%s ..."%ani.name)
class Cat(Animal):
pass
class Dog(Animal):
pass
class Person():
def __init__(self,name):
self.name = name
if __name__ == '__main__':
cat = Cat("Tom")
Animal.run(cat) # Tom ...
dog = Dog("jerry")
Animal.run(dog) # jerry ...
per = Person(" ")
Animal.run(per) # ...
print(isinstance(dog,Dog)) # True
print(isinstance(dog,Animal)) # True
print(isinstance(per,Animal)) # False
print(isinstance(per,(Animal,Person))) # True
print(dir(cat))
七、関数書き換えと演算子の再ロード
'''
, ,
__str__ , print() str()
。 __str__ 。
__repr__ , __str__ ,
__str__ = __repr__
'''
from datetime import datetime
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
# def __str__(self):
# return self.name
def __repr__(self):
return "%s-%s"%(self.name,self.age)
__str__ = __repr__
if __name__ == '__main__':
print(datetime.now()) # 2019-06-21 20:49:11.558019
per = Person("lili",19)
print(per) # lili-19
'''
'''
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "%s-%d"%(self.name,self.age)
def __add__(self, other):
return Person(self.name,self.age + other.age)
if __name__ == '__main__':
list1 = [1,3,4]
list2 = ["hello","good"]
# list
print(list1+list2) # [1, 3, 4, 'hello', 'good']
num1 = 12
num2 = 22
print(num1+num2) # 34
per = Person("lili",18)
per2 = Person(" ",19)
per3 = Person(" ",19)
print(per+per2+per3) # lili-56
'''
,
'''
class mydict(dict):
def __add__(self, other):
dict1 = self.copy()
for k,v in other.items():
dict1[k] = v
return dict1
if __name__ == '__main__':
mydict1 = mydict({1:"hello",2:"nice"})
mydict2 = mydict({3:"good",4:"great"})
print(mydict1+mydict2)
print(mydict1)
print(mydict2)