Python学习记录2023/09/12

面相对象

声明类class,属性,方法,实例化对象

class student1:
    name = 'ABC'
    age = 20
    def eat(self):
        print("EAT!EAT!EAT!")
    def run(self):
        print("run FAST!")
            
S1 = student1()
S1.age = 25
S1.name = "QQ"
S1.eat()
S1.run()
print("{}的年龄是{}".format(S1.name,S1.age))

出现问题

SyntaxError: Non-UTF-8 code starting with '\xb5' in file e:\Code\Python\helloworld\Day2.py on line 118, but no encoding declared; see https://peps.python.org/pep-0263/ for details

这是这是没有定义python文件编码引起的问题
解决方法:在开头添加

# coding=gbk
实例方法

在类的内部,定义一个函数,且self为第一个参数
定义在类里面,方法外面的是属性,定义在方法里面的事实例属性

构造方法

init() (构造方法),类似于C++中的构造函数
init() 方法可以有参数,参数通过 init() 传递到类的实例化操作上
参数self类似于C++指向实例化对象的一个指针
init()是默认调用的
为实例化对象自动赋值

class Person():
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
类的私有属性

两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。

# coding=gbk
from random import random
import math
import sys

class player:
    def __init__(self, name, HP):
        self.name = name
        self.HP = HP

    def __str__(self):
        return "[%s]还剩下[%s]HP" % (self.name, self.HP)

    def attack1(self, enemy):
        enemy.HP -= 10
        info = "[%s]捅了[%s]一刀" % (self.name, enemy.name)
        print(info)
        pass

    def attack2(self, enemy):
        enemy.HP -= 15
        info = "[%s]砍了[%s]一刀" % (self.name, enemy.name)
        print(info)
        pass

    def med(self):
        self.HP += 10
        info = "[%s]吃了一瓶药" % (self.name)
        print(info)
        pass

xm = player("西门吹雪", 100)

ye = player("叶孤城", 150)


print(xm.name,"HP=",xm.HP)
print(ye.name,"HP=",ye.HP)

while True:
    if (xm.HP < 0) or (ye.HP < 0):
        break
    xm.attack1(ye)
    print(xm)
    print(ye)
    ye.attack2(xm)
    print(xm)
    print(ye)
    #xm.med()

析构方法

类似于C++中的析构函数 del(),解释器自动执行,释放空间
使用del关键字可以手动删除

单继承

子类会继承父类的属性和方法。
先定义自己的构造函数,再调用继承的构造函数

class 子类名(父类名):
class people:
    name = ''
    age = 0
    __weight = 0
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
class stu(Person):
    def __int__(self, name, age, gender, grade):
        Person.__init__(self, name, age, gender)    #调用父类的构造函数
        stu.grade = grade
       
stuA1 = stu("WW", 30, "women", 100)			#实例化一个stu类

多继承

class speaker:

    def __init__(self, name, skill):
        speaker.name = name
        speaker.skill = skill

    def speak(self):
        print("开始演讲了")


class sample(stu, speaker):
    def __init__(self, name, age, gender, grade, skill):
        stu.__init__(self, name, age, gender, grade)
        speaker.__init__(self, name, skill)

    def show(self):
        print("xingming = {}, age = {}, gender = {}, grade = {}, skill = {}"
              .format(self.name, self.age, self.gender, self.grade, self.skill))

Sam1 = sample("SIMPLE", 35, "man", 9, 80)
Sam1.show()
重写父类方法
class fa1:
    def MyPrint(self):
        print("这是父类方法")

class Child1(fa1):
    def MyPrint(self):
        print("这是子类方法")

c1 = Child1()
c1.MyPrint()
调用父类方法
super(Child1,c1).MyPrint()

输出结果

这是子类方法
这是父类方法

类属性能被类对象和实例对象共同访问的
实例属性只能由实例对象访问
不能通过实例对线修改类属性

类方法

可以直接由类调用
#classmethod进行修饰

静态方法

Pycharm提示

方法 'speak' 可能为 'static' 

表示函数不需要访问类属性,也不需要访问实例属性,可以定义为静态方法
@staticmethod修饰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值