初識面向對象(理論1)

一:類和對象python

類就是一類事物函數

對象:具體的事物spa

好比人是一類,而具體叫某某名字的是對象對象

在python中,用變量表示特徵,用函數表示技能,於是具備相同特徵和技能的一類事物就是‘類’,對象是則是這一類事物中具體的一個。事務

一:初識內存

聲明一個類  class小寫。類名大寫加:,()可寫可不寫ci

class Person:   #定義一我的類      Person是類名
    role = 'person'  #人的角色屬性都是人
    def walk(self):  #人均可以走路,也就是有一個走路方法,也叫動態屬性
        print("person is walking...")

類的兩種做用:屬性引用和實例化it

一:屬性引用(類名.屬性)class

class Person:  # 定義一我的類
    role = 'person'  # 人的角色屬性都是人

    def walk(self):  # 人均可以走路,也就是有一個走路方法
        print("person is walking...")

print(Person.role)  # 查看人的role屬性
print(Person.walk)  # 引用人的走路方法,注意,這裏不是在調用

二:增強版(類做用,理論知識)import

class Person:    # 類名 Person
    role = '人'  # 類的靜態變量 是全部的對象共享的一個屬性
    def attack(self):pass
print(Person.role)   # 類提供給咱們的調用方式
print(Person.attack)
Person.role = '中國人'
print(Person.role)
Person.attack()   # 報錯
print(Person.__dict__) # 存儲方式
print(Person.__dict__['role'])
print(Person.__dict__['attack'])
Person.__dict__['role'] = '人'

類只有兩個做用:
    1.使用類中的名字
        查看類中的名字:
        類名.變量名                # 能夠修改變量的值
        類名.__dict__['變量名']   # 不能修改
    2.創造對象  實例化對象
        對象就是實例,一個實際的例子
        對象 = 類名()
class Person:    # 類名 Person
    role = '人'  # 類的靜態變量 是全部的對象共享的一個屬性
    def __init__(self,name,sex,aggr,hp):  #{}
        self.name = name
        self.sex = sex
        self.aggr = aggr
        self.hp = hp
    def attack(self):
        print(self.name)
        print(self.sex)

obj1 = Person('alex','female',250,1)
obj2 = Person('egon','male',500,2)
print(obj1.name,obj1.sex,obj1.aggr,obj1.hp)
print(obj2.name,obj2.sex,obj2.aggr,obj2.hp)
print(obj1.__dict__)
print(obj2.__dict__)
print(obj1)
Person.attack(obj1)  # 調用一個類中的方法了
obj1.attack()
對象的具體:
    內存地址的不一致
    不一樣的對象 屬性的值應該不一樣

類名(參數)
    創造一個空對象 : self
    調用__init__方法 : 初始化方法
    把參數傳給__init__方法
    完成init方法中的代碼
    自動將self返回給實例化的地方

self就是對象

調用類中的方法 :
    類名.方法名(對象)
    對象名.方法名()

三:總結

#初始面向對象
'''
class Person:
    role = '人'   # 類的靜態變量 是全部的對象共享的一個屬性
    def __init__(self):
       pass
    def attack(self):
1.類:一類事務,如人,電腦等
 對象:一個具體的事務,如小明,小明的手機
2.定義一個類:class Person(): 類名 Person 首字母要大寫 ()可寫可不寫
              在類中添加共用屬性  role = '人'  類的靜態變量 是全部的對象共享的一個屬性
在調用時用 print(Person.role)
3.查看類中的名字:
3.1 print(Person.role) 類提供給咱們的調用方式  能夠進行修改 如Person.role = '中國人'
3.2 print(Person.__dict__) 類提供的存儲方式 會將類中的全部名字和方法均顯示出來
print(Person.__dict__['role'])
4.類只有兩個做用:
4.1.使用類中的名字
    查看類中的名字:1. 類名.變量名 # 能夠修改變量的值
                  2.類名.__dict__['變量名']   # 不能修改
4.2.創造對象  實例化對象
    對象就是實例,一個實際的例子
    對象 = 類名()  #obj1=person()
5.實例化:
1.obj1 = Person('alex','female',1,250)  # 實例化 先創造對象 再初始化
print(obj1.name,obj1.sex,obj1.aggr,obj1.hp)
print(obj2.name,obj2.sex,obj2.aggr,obj2.hp)
print(obj1.__dict__)
2.調用__init__方法 : 初始化方法
    def __init__(self,name,sex,aggr,hp):  #方法 動態屬性  內置的雙下方法 self就是對象
        self.name = name    self理解爲等於一個空字典,self={} self.name中name爲key值,等號右邊的爲value值
        self.sex = sex    name,sex等均爲屬性
        self.aggr = aggr
        self.hp = hp
6.對象的具體:
print(obj1) #object at 0x000001B8F1378A90>
print(obj2) #object at 0x000001B8F1378AC8>
    1.內存地址的不一致
    2.不一樣的對象 屬性的值應該不一樣
7.類名(參數)
    1.創造一個空對象 : self(即obj1)
    2.調用__init__方法 : 初始化方法
    3.把參數傳給__init__方法
    4.完成init方法中的代碼
    5.自動將self返回給實例化的地方 self就是對象
8.調用類中的方法 :
 def attack(self):  # 自定義方法
        print(self.name)
1.類名.方法名(對象) Person.attack(obj1)
2.對象名.方法名() obj1.attack()  def attack(self):self就是obj1
9.使用面向對象的步驟:
1.完成類
首先分析一下角色和類 類裏面有哪些屬性 init方法
再分析這個類中能有哪些行爲 定義爲方法
2.實例化
傳參數獲取實例化以後的對象
    1.首先創造對象,
    2.執行init方法
3.對象的調用:使用對象調用對象屬性和類中的方法
對象名的做用:
    1.使用變量 對象名.屬性名 obj1.name
    2.調用方法 對象名.方法名() obj1.attack()
'''
####人狗大戰
class Person:    # 類名 Person
    role = '人'  # 類的靜態變量 是全部的對象共享的一個屬性
    def __init__(self,name,sex,aggr,hp):  #方法 動態屬性  內置的雙下方法
        self.name = name    # 對象屬性 實例屬性
        self.sex = sex
        self.aggr = aggr
        self.hp = hp
    def attack(self,dog):  # 自定義方法
        print('%s打了%s'%(self.name,dog.name))
        dog.hp -= self.aggr

class Dog:
    def __init__(self,name,kind,aggr,hp):
        self.name = name   # 對象屬性
        self.kind = kind
        self.aggr = aggr
        self.hp = hp
    def bite(self,person):
        print('%s咬了%s'%(self.name,person.name))
        person.hp -= self.aggr
hei = Dog('小黑','teddy',260,10000)  # 實例化: 先創造對象 再初始化
alex = Person('alex','female',1,250)  # 實例化
egon = Person('egon','male',2,500)  # 實例化
alex.attack(hei)   # Person.attack(alex,hei)
egon.attack(hei)   # Person.attack(alex,hei)
print(hei.hp)
hei.bite(alex)
print(alex.hp)
#
# ##根據半徑求圓面積##
# from math import pi
# class Circle:
#     def __init__(self,r):
#         self.r=r
#     def area(self):
#        return self.r**2*pi
#     def  perimeter(self):
#        return self.r*2*pi
# circle=Circle(5)
# print(circle.area())
# print(circle. perimeter())
# ###小明,老王###
# '''
# 小明,男,10歲,上山去砍柴
# # 小明,男,10歲,開車去東北
# # 小明,男,10歲,最愛大保健
# # 老張,男,90歲,上山去砍柴
# # 老張,男,90歲,開車去東北
# # 老張,男,90歲,最愛大保健
# # 老王,男,70歲,上山去砍柴
# '''
# class Person:
#     def __init__(self,name,sex,aggr):
#         self.name=name
#         self.sex = sex
#         self.aggr = aggr
#     def attack(self):
#         print("%s%s%s上山去砍柴"%(self.name,self.sex,self.aggr ))
#         print("%s%s%s開車去東北" % (self.name, self.sex, self.aggr))
#         print("%s%s%s最愛大保健" % (self.name, self.sex, self.aggr))
# obj1=Person("小明","男",10)
# obj1.attack()
# obj2=Person("老王","男",90)
# obj2.attack()
# obj3=Person("老張","男",75)
# ###方法二###
# class Person:
#     def __init__(self,name,sex,age):
#         self.name = name
#         self.age = age
#         self.sex = sex
#     def dirve(self):
#         print('%s,%s,%s歲,開車去東北'%(self.name,self.sex,self.age))
#     def climb(self):
#         print('%s,%s,%s歲,上山去砍柴'%(self.name,self.sex,self.age))
#     def hobby(self):
#         print('%s,%s,%s歲,最愛大保健'%(self.name,self.sex,self.age))
# ming = Person('小明','男',10)
# ming.dirve()
# ming.climb()
# ming.hobby()
# zhang = Person('老張','男',90)
# zhang.dirve()
# zhang.climb()
# zhang.hobby()
相關文章
相關標籤/搜索