python學習之路-第七天-python面向對象編程簡介
面向對象編程
在python中,同樣是類和對象作為重要的組成部分。
而且在python中基本數據類型如int都是有封裝類的,都有自己的方法,應該是和java裏面的Integer類似吧
類包括域和方法:域也就是類或對象中的變量,方法就是類裏面聲明的函數
self關鍵字:
相當於java中的this,下面是個例子:
#!/usr/bin/python # Filename: method.py class Person: def sayHi(self): print ‘Hello, how are you?‘ p = Person() p.sayHi() # This short example can also be written as Person().sayHi()
你一定很奇怪Python如何給self賦值以及為何你不需要給它賦值。舉一個例子會使此變得清晰。假如你有一個類稱為MyClass和這個類的一個實例MyObject。當你調用這個對象的方法MyObject.method(arg1, arg2)的時候,這會由Python自動轉為MyClass.method(MyObject, arg1, arg2)——這就是self的原理了。這也意味著如果你有一個不需要參數的方法,你還是得給這個方法定義一個self參數。
init方法的使用和說明(相當於構造函數):
用來在類被實例化後馬上就被運行的一段程序,用來作為對象的初始化操作
#!/usr/bin/python # Filename: class_init.py class Person: def __init__(self, name): self.name = name def sayHi(self): print ‘Hello, my name is‘, self.name p = Person(‘qjx‘) p.sayHi() # This short example can also be written as Person(‘qjx‘).sayHi()
$ python class_init.py
Hello, my name is qjx
del方法的使用和說明(相當於析構函數):
他是用在對象被釋放後運行的一段程序,用來釋放資源等操作,一般在程序消逝後自動進行,如果要手動釋放,就要顯示的調用del語句
一般的,對於變量和方法的作用域
__privatevar(兩個下劃線前綴)python會把它作為私有變量
還有一個慣例,也就是平常人們的命名習慣,如果某個變量只想在類或對象中使用,就應該以單下劃線前綴。
其他的名稱都將作為公共的,可以被其他類/對象使用
繼承(SchoolMember類被稱為 基本類 或 超類 。而Teacher和Student類被稱為 導出類 或 子類 )
#!/usr/bin/python
# Filename: inherit.py
class SchoolMember:
‘‘‘Represents any school member.‘‘‘
def __init__(self, name, age):
self.name = name
self.age = age
print ‘(Initialized SchoolMember: %s)‘ % self.name
def tell(self):
‘‘‘Tell my details.‘‘‘
print ‘Name:"%s" Age:"%s"‘ % (self.name, self.age),
class Teacher(SchoolMember):
‘‘‘Represents a teacher.‘‘‘
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print ‘(Initialized Teacher: %s)‘ % self.name
def tell(self):
SchoolMember.tell(self)
print ‘Salary: "%d"‘ % self.salary
class Student(SchoolMember):
‘‘‘Represents a student.‘‘‘
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print ‘(Initialized Student: %s)‘ % self.name
def tell(self):
SchoolMember.tell(self)
print ‘Marks: "%d"‘ % self.marks
t = Teacher(‘Mrs. Shrividya‘, 40, 30000)
s = Student(‘Swaroop‘, 22, 75)
print # prints a blank line
members = [t, s]
for member in members:
member.tell() # works for both Teachers and Students
$ python inherit.py
(Initialized SchoolMember: Mrs. Shrividya)
(Initialized Teacher: Mrs. Shrividya)
(Initialized SchoolMember: Swaroop)
(Initialized Student: Swaroop)
Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
Name:"Swaroop" Age:"22" Marks: "75"
Python在子類中不會自動調用基本類的constructor,你得親自專門調用它。
Python中可以多重繼承
python學習之路-第七天-python面向對象編程簡介