二十二、Python类和对象
Python是面向对象的编程语言,Python中几乎所有的东西都是一个对象,有它的属性和方法,类就像一个对象构造函数,或者是创建对象的“蓝图”。
(一)创建类
使用关键字class
class MyClass:
x=100
print(myclass)
(二)创建对象
使用class创建类后创建对象并输出
class MyClass:
x=100
p=MyClass()
print(p.x)
(三)init()函数
所有类都有一个名为init()的内置函数,它总是在类被初始化时执行。使用init()函数为对象属性赋值,或者在创建对象时需要执行的其他操作。
注意:init()函数每次使用该类创建新对象都会自动调用该函数。
遇到问题:
解决:
参考:
https://blog.youkuaiyun.com/qq_41903671/article/details/81609765
class person:
def __init__(self,name,age):
self.name=name
self.age=age
p=person("zym","22")
print(p.name)
print(p.age)
(四)对象方法
例如在person类中创建一个方法
class person:
def __init__(self,name,age):
self.name=name
self.age=age
def myfunc(self):
print("my name is "+self.name)
p=person("zym","22")
print(p.name)
print(p.age)
p.myfunc()
(五)自参数
self参数是对当前实例的引用,用于访问属于该类的变量,它不必命名self就可以随意调用它,但它必须是类中任何函数的第一个参数。
lass Person:
def __init__(,ysillyobject,name,age):
mysillyobject.name=name
mysillyobject.age=age
def myfunnc(abc):
print("my name is "+abc.name)
p=Person("zym",22)
p=myfunc()
参考:
https://blog.youkuaiyun.com/qq_42719751/article/details/102535051
https://www.cnblogs.com/lenfoo/p/11251517.html
而实际上的代码应该是:
class Person:
def __init__(mysillyobject,name,age):
mysillyobject.name=name
mysillyobject.age=age
def myfunnc(abc):
print("my name is "+abc.name)
p=Person("zym",22)
p.myfunnc()
是”class“!!!不是”lass“!!!
但是也出现了错误:
https://www.imooc.com/qadetail/330398
所以最终的代码是
class Person:
def __init__(mysillyobject,name,age):
mysillyobject.name=name
mysillyobject.age=age
def myfunnc(abc):
print("my name is "+abc.name)
p=Person("zym",22)
p.myfunnc()
(六)对象及其属性更改
1、替换
例如修改年龄为23
class Person:
def __init__(mysillyobject,name,age):
mysillyobject.name=name
mysillyobject.age=age
def myfunnc(abc):
print("my name is "+abc.name)
p=Person("zym",22)
p.myfunnc()
p.age=23
print(p.age)
2、删除对象属性
例如删除age属性
class Person:
def __init__(mysillyobject,name,age):
mysillyobject.name=name
mysillyobject.age=age
def myfunnc(abc):
print("my name is "+abc.name)
p=Person("zym",22)
p.myfunnc()
p.age=23
print(p.age)
del p.age
print(p.age)
3、删除对象
删除对象p
class Person:
def __init__(mysillyobject,name,age):
mysillyobject.name=name
mysillyobject.age=age
def myfunnc(abc):
print("my name is "+abc.name)
p=Person("zym",22)
p.myfunnc()
p.age=23
print(p.age)
del p
print(p)
(七)pass语句
class定义不能为空,但如果没有内容时放入pass语句避免出错。
class Person:
pass
二十三、Python继承
继承允许我们定义一个从另一个类继承所有方法和属性的类。父类是被继承的类,也称为基类。子类是从另一个类继承的类也称为派生类。
(一)创建父类
任何类都可以是父类,因此语法与创建任何其他类相同。
创建一个名为Person、firstname和lastname属性的类以及一个printname方法:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
x = Person("川川", "菜鸟")
x.printname()
(二)创建子类
要创建从另一个类继承功能的子类,则在创建子类时将父类作为参数发送。
例如:创建一个名为Student的类,它将继承父类person的属性和方法。
注意:pass是不想向类添加任何其它属性或者方法时使用的关键字。
class Student(person):
pass
现在Student类具有与person类相同的属性和方法,使用Student类创建对象,然后执行printname方法。
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
pass
x = Student("川川", "菜鸟")
x.printname()
(三)添加init()函数
把init()函数添加到Student类中。
(init()函数每次使用该类创建对象时会自动调用该函数)
class Student(Person):
def __init__(self, fname, lname):
添加__init__()函数后子类不再继承父类的__init__()函数。子类的__init__()函数功能会覆盖父类的init功能,为了保持父类的继承添加对负函数的调用__init__()
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
x = Student("川川", "菜鸟")
x.printname()
(四)使用super()函数
super()函数可以让子类继承其父类的所有方法和属性
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
x = Student("川川", "菜鸟")
x.printname()
(五)添加属性
添加一个属性调用graduationyear到Student类
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2021
x = Student("川川", "菜鸟")
print(x.graduationyear)
年份2019应该是一个变量,并在创建学生对象时传递给Student类。因此在init()函数中添加另一个参数year,并在创建对象时传递正确的年份。
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
x = Student("川川", "菜鸟", 2021)
print(x.graduationyear)
(六)添加方法
添加一个调用welcome到Student类的方法
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
def welcome(self):
print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
x = Student("川川", "菜鸟", 2021)
x.welcome()