12 物件導向基礎-1
生成器(擴充套件)
生成器可以看做是一個容器.當程式需要對應的資料的時候才去裡面拿取資料,生成器中資料只能一個一個生成,不能跳過,一個資料只生成一次,已生成的資料無法再生成.
資料的獲取: _ _ next _ _()方法注:
1.只要函式宣告中有yield
關鍵字,則函式就變成了一個生成器.
- 生成器和其他資料容器不同,生成器儲存在記憶體空間裡的是產生資料的演算法,並沒有儲存具體的資料,使得它佔用空間很小.
例項:利用生成器生成一個斐波那契數列
def xu_lie(n):
pre1 = 1
pre2 = 1
for i in range(1, n+1):
if i == 1 or i == 2:
current = 1
yield current
else:
pre1, pre2 = pre2, current
yield current
xulie = xu_lie(10)
print(xulie.__next__())
print(xulie.__next__())
print(xulie.__next__())
# 1
# 1
# 2
1.物件導向的基本概念
(1)基於物件導向的程式設計, 面對問題考慮有沒有相應的物件來解決這個問題 --> 工具: 類和物件
(2)類: 對擁有共同屬性和方法的物件的封裝.類是抽象
的.(比如:人類)
(3)物件:物件就是類的具體例項,是具體的事物.而且物件的屬性是確定的 (比如:一個叫小明的人類)
2.宣告類和物件
(1)宣告類
class 類名(父類):
屬性
方法
注意:
- 類的命名首字母要大寫
- 括號裡為要繼承的父類,預設為空
- 屬性:物件的屬性,或者是類的欄位
- 方法:就是在類裡面宣告函式,實現某種功能
def eat(self):
print(self, '在吃飯')
def sleep(self):
print(self, '在睡覺(¦3[▓▓] 晚安')
物件方法預設都有一個self引數,這個引數在方法被呼叫的時候不用傳參(系統會自動傳參),誰來呼叫這個方法,那self就指向誰.
(2)宣告物件
物件名 = 類名()
即通過類的構造方法去建立一個物件, 生成的物件可以使用xx.xx語法使用類中宣告的物件的方法和屬性
3.物件的屬性
物件的屬性的宣告
class 類名:
def __init__(self,引數1, 引數2,引數...):
self.屬性名 = 初值
self.屬性2 = 初值2
_ _ init _ _():方法是初始化物件的屬性,是系統自帶的方法,再通過構造方法建立物件的時候除了self,其他引數都必須有值.
class People:
def __init__(self, name1='', age1=0, sex1='女'):
# 在這個地方宣告物件的屬性
print('---')
print(name1)
# 在init方法中宣告物件的屬性
"""
name,age,和sex就是Person這個類的物件屬性.類的物件屬性,需要通過物件來使用
"""
self.name = name1
self.age = age1
self.sex = sex1
self.flag = '1'
4.物件屬性的增刪改查
class Dog:
"""狗類"""
def __init__(self, age='0', color='color'):
self.age = age
self.color = color
dog1 = Dog(3, 'white')
(1).查
# 方法一:
dog1.age, dog1.color
# 方法二:
dog1.__getattribute__('age')
# 方法三:
getattr(dog1, 'age') # getattr(物件,屬性名,預設值(預設值可以防止報錯,可省略))
(2).改
# 方法一:
dog1.color = 4
# 方法二:
dog1.__setattr__('color', 'black')
# 方法三:
setattr(dog1, 'color', 'blue')
(3).增
# 方法1:
dog1.name = '大黃'
# 方法2:
dog1.__setattr__('type', '哈士奇')
# 方法三:
setattr(dog1, 'sex', '公')
(4)刪
# 方法1:
del dog1.age
# 方法2:
dog1.__delattr__('age')
# 方法三:
delattr(dog1, 'color')
5.slots魔法
slots可以對物件的屬性進行限制(約束),防止後面給物件新增的屬性寫錯了.
slots一般寫在開頭類的宣告的下面一行
如果在後面給物件新增一個slots以外的屬性,則會報錯.
class Person:
__slots__ = ('name', 'age', 'sex')
以上說明:Person類,只能有name,age,sex三個屬性,如果在後面給物件新增屬性的時候不在slots裡,則會報錯.
6.類中的方法
(1).屬性:
- a.類的屬性:累的屬性宣告在類裡面,函式外面,類的屬性屬於類,類的欄位通過類呼叫
- b.物件的屬性:物件的屬性寫在init方法裡面,通過物件呼叫
(2).方法:
- a.物件的方法:自帶一個self引數,一般通過物件去呼叫
- b.類的方法:
(1)
使用@classmethod修飾,自帶一個cls引數(同self原理),不用傳參,誰來呼叫這個方法,這個cls指向誰(2)
每新建一個類方法,就需用@classmethod要修飾一次.(3
)類方法就要通過類去呼叫 - c.靜態方法:
(1)
使用@classmethod修飾(2)
沒有預設引數(3)
呼叫的時候,是通過類來呼叫的
例項:
class Person:
# number是類欄位
number = 0
def __init__(self, name='', age=0):
# name 和 age是物件屬性
self.name = name
self.age = age
def eat(self, food):
print('%s正在吃%s' % (self.name, food))
@classmethod
def hurt_earth(cls):
# cls指向的是呼叫這個方法的類,cls可以當成類來使用
print('人類破壞環境!!!')
# 使用cls建立物件
pt = cls()
print(pt)
# 也可以通過cls使用類的欄位
print(cls.number)
@staticmethod
def protect():
print('人類保護地球')
if __name__ == '__main__':
# 類的屬性,通過類來使用
print(Person.number)
# 物件的屬性,通過物件來使用
p1 = Person('小明')
print(p1.name, p1.age)
# 物件的方法要通過物件來使用
p1.eat('南瓜')
# 類的方法要通過類來使用
Person.hurt_earth()
# 靜態方法通過類來呼叫
Person.protect()
相關文章
- JAVA物件導向基礎--物件導向介紹Java物件
- Java基礎-物件導向基礎Java物件
- python物件導向[基礎]Python物件
- Java基礎 --- 物件導向Java物件
- JAVA物件導向基礎Java物件
- java基礎二:物件導向Java物件
- 面向Python,物件導向(基礎)Python物件
- PHP 物件導向基礎概念PHP物件
- Golang 基礎之物件導向Golang物件
- Python基礎之物件導向Python物件
- 面向Python,物件導向(基礎2)Python物件
- JAVA物件導向基礎--異常Java物件
- 「MoreThanJava」Day 4:物件導向基礎Java物件
- PHP基礎之物件導向篇PHP物件
- 【Java基礎】物件導向開發Java物件
- 面向Python,物件導向(基礎3)Python物件
- 《Python 基礎篇》六:物件導向Python物件
- php基礎語法_物件導向PHP物件
- (Java筆記)物件導向基礎Java筆記物件
- 夯實Java基礎系列1:Java物件導向三大特性(基礎篇)Java物件
- 物件導向(理解物件)——JavaScript基礎總結(一)物件JavaScript
- Python物件導向基礎:設定物件屬性Python物件
- python 基礎語法之物件導向Python物件
- python基礎(物件導向程式設計)Python物件程式設計
- python物件導向程式設計基礎Python物件程式設計
- Python之物件導向基礎小練Python物件
- PHP基礎之物件導向講解PHP物件
- 菜鳥學習筆記:Java基礎篇1(基礎語法、物件導向)筆記Java物件
- Java基礎 --- 物件導向綜合訓練Java物件
- Java基礎01 從HelloWorld到物件導向Java物件
- ES5物件導向基礎結構物件
- Js物件導向(1): 理解物件JS物件
- 『Java 語法基礎』物件導向有哪些特性Java物件
- JAVA物件導向基礎--N種內部類Java物件
- Dart語法篇之物件導向基礎(五)Dart物件
- 【Java基礎知識】物件導向有哪些特性Java物件
- Android探索之旅 | 物件導向和Java基礎Android物件Java
- 物件導向-物件導向思想物件