python类的创建和关系
一、定义和创建类
要创建类,需要使用关键字“class”。
示例:创建一个名为myname的类如下
class myname:
x =100
print(myname)
解释:该类名为myname,x为其属性名。
1.私有属性
类的一些属性是被对象无法调用的,只有在类的内部才可以使用。
示例:
class jifen:
_count=0
_name=''
def __init__(self,name,count):
self._count += count
self._name =name
def seek (self):
print(self._name+'积分'+str(self._count))
m=jifen('小王',300)
m.seek()
输出:
小王积分300
解释:输出时使用+连接字符串,因为是count是数字,所以使用str函数转化为字符串。
2.私有方法
私有方法和私有属性同理,可类比去记忆理解。
class jifen:
def _jisuan(self,count):
print('更改积分为:'+str(count))
m=jifen
m._jisaun(200)
输出:
Traceback (most recent call last):
File "C:\Users\86139\学习\main.py", line 420, in <module>
m._jisaun(200)
AttributeError: type object 'jifen' has no attribute '_jisaun'
解释:函数jisuan是私有方法,调用报错。
二、创建对象
接着上面的代码继续完善,使用myname的类创建对象。
示例:
print("Flase")
class myname:
x = 100
user = myname()
print(myname.x)
输出:
100
解释:在该类中创建user这个对象,并输出x的值。
三、init()函数
定义:所有的类中都有一个名为init的函数,作用是在类初始化时执行。使用init函数为对象属性赋值
,或在创建对象执行其他操作。
示例:
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
user = myname("小王",20)
print(user.name)
print(user.age)
输出:
小王
20
解释:使用init函数给name,age赋值。
四、对象方法
个人理解:init函数负责初始化给属性赋值;对象方法则是再定义一个函数调用
属性执行输出。
示例:
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
def my(self):
print("我的名字:"+self.name,"年龄:"+self.age)
user = myname("小王","二十")
user.my()
输出:
我的名字:小王 年龄:二十
解释:通过init函数将对象的属性赋值,再通过my函数调用输出。
5.pass语句
与之前的循环中的pass语句原理一样,可以类比去记去理解。
class myname:
pass
解释:class的定义不能为空,如果出于某种寻求需要一个没有内容的类。则需要放入pass语句以免报错。
五、对象属性的更改
1.替换
替换:如字面意思将属性的赋值更改掉。
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
def my(self):
print("我的名字:"+self.name,"年龄:"+self.age)
user = myname("小王","二十")
user.age = 22
print(user.age)
输出:
22
解释:将age属性的赋值更改由20改为22。
2.删除
删除:同理将属性直接从类中删除。
示例:
class myname:
def __init__(self,name,age):
self.name= name
self.age= age
del user.age
def my(self):
print("我的名字:"+self.name,"年龄:"+self.age)
user = myname("小王","二十")
del user.age
print(user.age)
输出:会报错
解释:age已经被删除,未有该属性。
六、类与类的关系
1.继承
(1)单继承
被继承类称为:基类,父类,超类;继承者称为:子类,一个子类可以继承它的父类的任何属性和方法。
类的继承语法:
class 类名 (被继承父类的名字)
.......
示例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
pass
x = sun("小王", "憨憨")
x.printname()
输出:
小王 憨憨
逻辑解释:在上面的代码中,定义了一个父类father,一个子类sun;sun类的内容为pass空。通过:class sun(father):继承了father类的属性方法。
(2)多继承
一个子类可以同时继承两个或两个以上的父类,这种情况称为:多继承。
示例:
class animals:
color =''
weight=0
def jump(self):
print('我能跳')
class cats:
def maomi(self):
print('喵喵')
class mycat (animals,cats):
def catch(self):
print('我才能抓到老鼠')
c=mycat()
c.jump()
c.maomi()
c.catch()
输出:
我能跳
喵喵
我才能抓到老鼠
2.在继承中添加init函数
接着上面的代码进行变化。
正确示例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
father.__init__(self, fname, lname)
x = sun("小王", "憨憨")
x.printname()
输出:
小王 憨憨
错误示例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
x = sun("小王", "憨憨")
x.printname()
输出:
File "C:\Users\86139\学习\main.py", line 388
x = sun("小王", "憨憨")
IndentationError: expected an indented block
解释:错误原因子类未曾调用父类的init,为保持对父类的继承仍需要调用init函数。
3.super函数
super函数的作用:可以让子类继承其父类的所有属性和方法。
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
super().__init__( fname, lname)
x = sun("小王", "憨憨")
x.printname()
输出:
小王 憨憨
4.添加属性
作用:增添一个属性到子类中。
便于理解用上面的代码进行简单更改。
示例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname):
super().__init__( fname, lname)
self.xinxi =22
x = sun("小王", "憨憨")
x.printname()
print(x.xinxi)
输出:
小王 憨憨
22
理解
5.添加方法
作用:添加一个方法到子类中。
便于理解用上面的代码进行简单更改。
示例:
class father:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class sun(father):
def __init__(self, fname, lname,xinxi):
super().__init__( fname, lname)
self.xinxi =22
def san(self):
print("姓名",self.firstname,"性别",self.lastname,"年龄", self.xinxi)
x = sun("小王", "憨憨","22")
x.san()
输出:
姓名 小王 性别 憨憨 年龄 22