Python面向对象基础
一、前言
其实自己一直都觉得自己的编程代码能力是很垃圾的,事实也的确如此,算法算法不会,开发开发不会...今天和同学交流了一些代码。发现果然自己真的很菜啊。那就巩固一下基础吧.很久没碰,这都全忘了呀。
二、类和对象
什么是类,什么是对象。对象是类定义来的,类是无实际数据的。就是一个对象的模版。还是不懂对吧。简单来说,就是类是爸爸,对象是儿子。儿子就是爸爸这个模样刻出来的。还不懂是吧?比喻:人,就是一个类,动物也是一个类,那么对象就是。张三,李四,狗,猫。
然后类和对象之间会有一个关系叫做实例化。比如,张三 是 人 这个类的 实例对象。简单来说,张三是人的实例。
那在其他语言中,实例化一个对象,通常是 new,比如PHP:
$a = new test();
而在Python中,则是直接实例化调用。
class people:
count = 0 #类属性
def __init__(self,name,age):
self.name = name #对象属性
self.age = age
people.count +=1
def who(self):
print(f"{self.name} is {self.age} years old.")
zhangsan = people("张三","80")
xiaomin = people("小名","90")
zhangsan.who()
xiaomin.who()
print(xiaoin.count)
输出:
张三 is 80 years old.
小名 is 90 years old.
2
获取类属性和实例对象属性
class people:
count = 0
def __init__(self, name, age,count):
self.name = name
self.age = age
self.count = count
people.count += 1
def getinfo(self):
print(f"{self.name} is {self.age} years old.")
def get_class_count(self):
print("类的属性count:",people.count)
def get_intance_count(self):
print("实例对象count",self.count)
zhangsan = people("张三", "80",999)
xiaomin = people("小名", "90",999)
print()
如果使用self.count,会先去找实例对象的属性,如果没有就会去找类属性。所以相要获取正确的类属性,应该直接调用people.count,但是如果是在外部就得换个方式表达。
zhangsan.__class__
代表的就是people类,那么就是zhangsan.__class__.count
就是寻求类的count属性。
print(zhangsan.__class__) #获取对象的类
print(people.__base__) #获取类的父类
输出为:
<class '__main__.people'>
<class 'object'>
还有一些内置方法,例如__name__
print(zhangsan.__class__.__name__)
print(people.__base__.__name__)
输出为:
people
object
私有属性
私有属性就是只在类的内部调用,在外部不允许调用,设置方式为在属性前面加 __ 双下划线。比如__name
class people:
count = 0
__secretcount =999
def __init__(self):
self.count+=1
def get_count(self):
print("公共属性",self.count)
def get_secret_count(self):
print("私有属性:",self.__secretcount)
zhangsan = people()
zhangsan.get_count()
zhangsan.get_secret_count()
print(zhangsan.count)
print(zhangsan.__secretcount)
这里的输出就是:
三、继承
一个类可以继承另一个类。
calss chilld(people):
这样child类就会继承people的所有属性和方法。当子类需要新的对象属性的时候,就需要调用父类的初始函数,使用
super().__init__(name,age)
调用函数。其中super就是指父类
class people:
peoplecount = 0
def __init__(self,name,age):
self.name = name
self.age = age
people.peoplecount +=1
def get_info(self):
print(f"{self.name} is {self.age} ")
def get_admin(self):
print("admin")
class child(people):
def __init__(self,name,age,admin):
super().__init__(name,age)
self.admin = admin
def get_name(self):
print(self.name)
def get(self):
self.get_admin()
def get_admin(self):
print("get_admin被重写了")
zhangsan = child("zhangsan",90,"no")
bob = people("bob",80)
zhangsan.get_name()
zhangsan.get_admin()
zhangsan.get_info()
bob.get_admin()
print(bob.peoplecount)
输出:
zhangsan
get_admin被重写了
zhangsan is 90
admin
2
四、类的实践练习
题目一
小明和小美都爱跑步
小明体重 75 公斤
小美体重 45 公斤
每次跑步会减肥 0.5 公斤
每次吃东西体重增加 1 公斤
输入
体重 跑步次数 吃东西次数
输出
体重
解释:两个都是人,都有共同的特点。所以可以归于一个类。
class People:
def __init__(self,name,weight):
self.weight = weight
self.name = name
def run(self):
print(f"{self.name}跑步了,体重降了0.5")
self.weight -=0.5
def eat(self):
print(f"{self.name}吃饭了,体重增长了1")
self.weight +=1
def __str__(self):
return f"{self.name}的体重是{self.weight}"
xiaomin =People("小明",90)
honhon = People("红红",80)
xiaomin.run()
honhon.eat()
xiaomin.eat()
honhon.run()
print(xiaomin)
print(honhon)
输出:
小明跑步了,体重降了0.5
红红吃饭了,体重增长了1
小明吃饭了,体重增长了1
红红跑步了,体重降了0.5
小明的体重是90.5
红红的体重是80.5
题目二
输出下面的信息。
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
class People:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def Doing(self,what):
print(f"{self.name},{self.age}岁,{self.sex},{what}")
xiaomin =People("小明",10,"男")
xiaomin.Doing("上山去砍柴")
xiaomin.Doing("开车去东北")
xiaomin.Doing("最爱大宝宝")
laoli = People("老李",90,"男")
laoli.Doing("死了")
题目三
房子(House)有户型、总面积、家具名称列表;新房子没有任何的家具
家具(HouseItem)有名字、占地面积
席梦思(bed) 占地 4 平米
衣柜(bed) 占地 2 平米
餐桌(bed) 占地 1.5 平米
将以上三个家具添加到房子中
打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
class House:
Houseitems =[]
all_sqr = 0
now_sqr = 0
def __init__(self,house_type,all_sqr):
self.house_type = house_type
House.all_sqr = all_sqr
House.now_sqr = all_sqr
def add_items(self,item):
self.Houseitems.append(item.name)
self.now_sqr -=item.sqr
def __str__(self):
return (f'''户型:{self.house_type}
总面积:{self.all_sqr}
实用面积:{self.now_sqr}
家具列表:{self.Houseitems}
'''
)
class Houseitem:
def __init__(self,item_name,itme_sqr):
self.name = item_name
self.sqr = itme_sqr
House1 = House("120传统宅子",120)
bed = Houseitem("席梦思",4)
guizi = Houseitem("衣柜",2)
desk = Houseitem("餐桌",1.5)
House1.add_items(bed)
House1.add_items(guizi)
House1.add_items(desk)
print(House1)