python_筆記_day13_類_屬性_增刪改查

復習day12

1.迭代器和生成器

  • 迭代器:獲取數據:next(迭代器),for循環遍歷,數據來源:轉換,生成器
  • 生成器:就是迭代器
def 函數名():
    yield 值

(表達 for 變量 in 序列 if 條件語句)

2.模塊

  • 模塊就是py文件
  • 包/庫 就是文件夾
  • 導入模塊中所有的內容
 from math import *
  • 阻止調用執行
if __name__ == '__main__':
    pass

3.異常處理

  • try:
    需要捕獲異常的代碼段
  • except:
    出現異常后對異常的處理代碼
  • finally:
    不管try后面的代碼是否異常,異常是否被捕獲都會執行的代碼

補充:三目運算符

  • 中的三目運算符: 表達式?值1:值2 -- 判斷表達是否為真:如果是整個運算的結果是值1 ,否者是值2

  • python的三目運算符:值1 if 表達式: else 值2

print('奇數' if 22 % 2 else '偶數')


一.類

1. 什么是類,什么是對象

1.1官方定義

  • 類:就是擁有相同功能和相同屬性的對象的集合
  • 對象:就是累的實例

1.2生活角度看類和對象

  • 如果人是類,yt就是對象,l也是對象
  • 如果電腦是類,具體到單個實物就是對象

2. 類的聲明

2.1 語法

class 類名:
    類的內容

2.2 說明

  • class:聲明類的關鍵字固定寫法
  • 類名: 標識符,不能是關鍵字
    見名知意 ,采用駝峰式命名(采用通過單詞首字母大寫的方式來區分不同的單詞),首字母大寫
  • : 固定寫法
    內的內容 - 主要包含: 類的說明文檔, 屬性(普通變量) ,功能(函數/方法)
class Person:
     """人類"""
     # ========屬性===========
     # ========屬性===========
     pass

3.對象怎么聲明

對象 = 類()   - 創建指定的類的對象

4.類中的方法

4.1 什么是方法

  • 聲明在類中的函數就叫方法

4.2 類中的方法

  • 有三種:對象方法,類方法,靜態方法

4.2.1 對象方法

  • 直接聲明在類中的函數,
  • 有默認參數self,通過對象調用的時候這個參數不用傳參,因為系統會自動將當前對象傳遞給self
    (self,當前對象 - 誰調用self就指向誰,當前類的對象能做的事情self都能做)
  • 通過類的對象來調用(記!!!)
# class Person:
#     def eat(self, food):
#         print('人吃' + food)

4.2.2 類的方法

  • 聲明函數前加@classmethod
  • 有默認參數cls,通過類調用的時候這個參數不用傳參,因為系統會自動將當前類傳遞給cls
  • cls,當前類 - 誰調用誰就指向誰,當前類能做的事 cls
  • 通過類來調用: 類.類方法

4.2.3 靜態方法

  • 聲明函數前加@staticmethod
  • 沒有默認參數
  • 通過類來調用:類.靜態方法
class Person:
    """人類"""
#3 對象方法
    def eat(self, food):
        print(str(self) + '吃' + food)
        self.study('python')

    def study(self, type1):
        print('學習'+type1)

#2 類方法
    @classmethod
    def destroy(cls):
        cls.func1()
        print('人類改變環境')
    @classmethod
    def func1(cls):
        print('類方法')

#2 靜態方法
    @staticmethod
    def beat_animal():
        print("上課,睡覺,打豆豆")


p1 = Person()
p2 = Person()
p1.eat('雞')
p2.eat('炸雞')
Person.destroy()
Person.beat_animal()

二.類的屬性

  • 內中的屬性分為:對象屬性和字段

1.字段

  • 直接聲明在類中的變量就叫字段
  • 字段要通過'類.字段'的方式來使用
  • 當屬性的值不會因為對象不同而不同,這種屬性就可以聲明成類的字段
class Dog:
     """狗"""
# =======字段========
     numbers = 10


Dog.numbers =100
print(Dog.numbers)

2 對象屬性


2.0什么數據init方法

  • init是類默認繼承的一個魔法方法,用來初始化類:本質是對象方法,但不需要程序員自己調用,會自動調用
class Person :
    def __init__(self, name):
        print(name +'init方法')
p1 = Person('你好')
  • 通過類創建對象的時候,系統會自動調用類中的init方法,并且構造方法中的實參會全部傳給init
  • 創建對象的時候需不需要參數,需要幾個參數,看這個內的init方法
  • 了解 聲明了的時候系統會自動給我們創建一個函數,這個函數的函數名和聲明的類的類名一樣,這個函數叫構造方法
  • 函數會在內存中開辟空間創建對象,然后用創建的對象去調用類的init方法,然后才將對象返回

2.1對象屬性

  • 在init方法中,以'self.屬性=值'的的形式聲明
  • 對象屬性要通過'對象.屬性'的方式來使用
  • 當屬性的值會因為對象的不同而不同的時候使用對象屬性
class Dog:
    """狗"""
    # =======字段========
    numbers = 10
    def __init__(self, name = '大黃', age = 2, gender = 'boy', color = '白色'):
        self.color = color
        self.gender = gender
        self.age = age
        self.name = name
d = Dog()
print(d.color)
print(d.gender)
print(d.age)
print(d.name)
print('======================')
d1 = Dog(name='巫妖王', color='黑色', age=999, gender='前方高能')
print(d1.color)
print(d1.gender)
print(d1.age)
print(d1.name)
  • 練習: 聲明一個學生類,用于屬性:名字,電話,年齡,學號 擁有功能 學習(打印XXX在學XXX)
class Student_msg:
    def __init__(self, name, tel='00000000000', age=0, number='stu9999',
                 gender='boy'):
        self.name = name
        self.tel = tel
        self.age = age
        self.number = number
        self.gender = gender
    numbers = 19292
    def learing(self, subject: str):
        print(Student_msg.numbers)
        print('%s在學%s' % (self.name, subject))


a1 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃雞')

a2 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃雞')

3 聲明類的時候方法的選擇

  • 1 對象方法:實現函數的功能需要對象屬性的時候,就使用對象方法
  • 2 類方法:實現函數的功能不需要對象屬性,但是需要類的相關操作就使用類方法
  • 3 靜態方法:實現函數的功能即不需要對象屬性,也不需要類相關的操作就使用靜態方法
  • 寫一個矩形類,有屬性:長和寬 方法:求面積,求周長
class Rect:
    """矩形"""
    def __init__(self,weigh,height):
        self.weigh = weigh
        self.height = height

    def area(self):
        return self.height*self.weigh

    def perimeter(self):
        return (self.height+self.weigh)*2

    def show_msg(self):
        return '矩形%dX%d的周長是:%d 面積是:%d'%(self.weigh,self.height,self.perimeter(),self.area())

p = Rect(30, 60)
print(p.show_msg())

三. python中的對象屬性支持增,刪,改,查

class Dog:
    def __init__(self, name):
        self.name =name
        self.age = 0


dog1 =Dog('大黃')
dog2 =Dog('猜猜')

1.查

  • a.對象.屬性 - 獲取指定屬性對應的值,如果屬性不存在會報錯
  • b. getattr(對象,屬性名,默認值) 獲取指定屬性對應的值
    當屬性不存在有默認值的時候不報錯,返回默認值
    沒設置默認值的時候回報錯
print(dog1.name)
print(getattr(dog1, 'name2', '無名狗'))

2.增,改

  • a.對象.屬性 = 值 - 當屬性不存在就添加屬性,當屬性存在修改屬性的值
  • b.setattr(對象,屬性名,值) - 當屬性不存在就添加屬性,當屬性存在修改屬性的值
dog1.name = '貝貝'
print(dog1.name)
a_name = 'color'
setattr(dog1, a_name, '白色')
print(dog1.color)
setattr(dog1, 'name', '靜靜')
print(dog1.name)

3 刪

  • del 對象.屬性
  • delattr(對象,屬性名)
print(getattr(dog1, 'name', '無名狗,嗚嗚嗚'))
del dog1.name
print(getattr(dog1, 'name', '無名狗,哦哦哦哦哦哦'))
delattr(dog2, 'age')
print(getattr(dog2, 'age', '還沒出生的dog'))

  • 注意對象屬性的增刪改查只針對單個對象
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。