python初始面向对象
1.类的定义 定义是通过class关键字加大写字母开头的类名 class Person(object): pass class 后面接类名,即Person 类名通常开头大写首字母的单词 接着(object),表示该类是从哪个类继承下来的,如果没有合适的 继承类,就使用默认object类,这个是所有类最终都会继承的类 定义好Peraon类,就可以根据Person类创建出Person的实例化对象 创建实力例就是通过类名+()实现的 p = Person() #创建实例空间 print(p) #<__main__.Person object at 0x0000000002721748> print(Person) # <class '__main__.Person'> 可以看到p指向是一个Person实例空间,Person指向是一个本类 可以自由的给实例变量捆绑属性 p.name = "alex" print(p.name) # alex
面向对象: 1类,具有相同属性和技能的一类事物 class Person: 2.对象,具体的类的表现,具体的实例 p = Person("alex",18) 具体的实例化空间 class Person: 类体分两部分: 变量部分 方法(函数)类体部分 class Person: mind = "有思想的" # 变量部分,静态变量,静态字段 def __init__(self): # 构造方法 def func(self): #方法(函数)部分,动态变量 print(333) 类名的角度:
# 由于可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为 # # 必须绑定的属性强制性的填写进去,通过定义一个特殊的__init__方法 # # 在创建实例的时候,把 name , age ,sex 等属性捆绑上去. # # # class Person: # money = "货币" # def __init__(self,name,age,sex): # self.name = name # self.age = age # self.sex = sex # #注:__init__是双下划线 # # #注意: # # __init__方法第一个参数永远是self,表示创建的实例本身, # # 因此在__init__方法内部,就可以把各种属性绑定到self # # 因此self就是指向创建的实例本身 # # 有了__init__方法,在创建实例的时候,就不能传入空的参数了 # # 必须传入与__init__方法匹配的参数,但self需要要传,python # # 解释器会自己把实例变量传进去 # # 静态操作: # print(Person.money) # 货币 查询 # Person.moind = "有思想的" # # print(Person.__dict__) # 增加 'moind': '有思想的'} # del Person.money # # print(Person.__dict__) # # # p = Person("alex",80,"男") # # print(p.age) # 80 # # print(p.__dict__) # {'name': 'alex', 'age': 80, 'sex': '男'} 对象操作类中的静态变量 : 只能查 # # print(p.name) # 80 查 # # # print(Person.__dict__) #查询类中所有的内容 # # # 和普通方法相比,在类中定义的函数只有一点不同,就是第一个参数 # # 永远都是self,并且调用时,不用传递参数.除此之外,类的方法与普通方法 # # 没有什么区别 # # # 总结: # # 1.__dict__:可以查询类和对象中的类容,并且以字典形式返回 # # 2.类名+()---实例化一个对象 # # 3.实例化对象之后会自动执行__init__方法,并且将对象传给self参数 # # 4.给对象封装相应的属性 # # # # 2.数据封装 # # 面向对象编程的一个重要特点就是数据封装 # # 在Person类中,每个实例都拥有各自的 name,age,sex数据 # # Person实例化本身就拥有这些数据,要访问这些数据,就没有 # # 必要从外面的函数去访问,可以直接在Person类的内部定义访问数据的 # # 函数,这样就把"数据"封装起来了.这些封装数据的函数时和Person # # 类本身关联起来,我们称为类的方法. # # class Person: # # def __init__(self,name,age,sex): # # self.name = name # # self.age = age # # self.sex = sex # # def func(self): # # # print("%s,%s,%s" %(self.name,self.age,self.sex)) # # # # p = Person("alex",10,"男") # # p.func() # alex,10,男 # # 这样一来,我们从外部看Person类,就只需要知道,创建实例需要给出 name,age,sex # # 如何打印,都是在Person类的内部定义的,这些数据和逻辑被"封装"起来了,调用 # # 很容易,但却不知道内部实现细节.封装的另外一个好处就是可以给Person类增加形容方法 # # # # 总结: # # 1.类创建的是实例的模板,而实例则是一个具体的对象,各个实例拥有的数据都是 # # 相互独立的,互不影响> # # 2.方法就是与实例绑定的函数,和普通函数不同,方法可以直接返回实例的数据 # # 3.python允许实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们 # # 都是同一类的不同