类方法、静态、实例方法、super...???
2020-04-05 本文已影响0人
lvyz0207
新增样例
一个样例,讲明白了三种方法,赞👍
类方法
、静态方法
、实例方法
import re
class Person:
person_number = 0
def __init__(self,name, gender): # 构造方法:用来给对象初始化
self.name = name
self.gender = gender
Person.person_number += 1
def say_hello(self): # 实例方法:应用在具体的对象上
"""
1、方法占用的空间在类空间,与每一个对象进行绑定
2、调用方法是: 对象名.方法名
3、使用self关键字进行引用
:return:
"""
print("大家好,我叫:"+ self.name + ",我是" + self.gender + "生!")
@classmethod
def print_person_number(cls): # 类方法:应用在类上面
"""
1、使用关键字@classmethod
2、类方法存储在类空间中,没有绑定到对象上
3、调用类方法 类名.方法名
4、访问类变量,关键字为 cls
:return:
"""
print("当前有:" + str(cls.person_number)+ "人!")
@staticmethod
def check_mobile(mobile:str): # 静态方法: 应用字类上面
"""
1、使用关键字@staticmethod
2、类方法存储在类空间中,没有绑定到对象上
3、调用类方法 类名.方法名
4、静态方法不能访问到类中的任何资源(类变量或实例变量,self,cls)
5、静态方法相当于工具,拿来即用
:return:
"""
pattern = re.compile("[1][3456789]\d{9}")
match_result = pattern.match(mobile)
if match_result is None:
return False
else:
return True
@property # 属性
def func(self):
"""
1、控制字段的读写 @property 只读
@func.setter
2、方便进行参数校验
对字段值的保护
:return:
"""
return 1
if __name__ == '__main__':
alice = Person("Alice", "女")
# 调用实例方法 对象名.方法名
alice.say_hello()
# 调用类方法 类名.方法名
Person.print_person_number()
# 调用静态方法 类名.方法名
# Person.print_welcome("FPS_xiaotian")
mobile = input("请输入手机号:")
if Person.check_mobile(mobile):
print("手机号输入的正确!")
else:
print("手机号码不正确!")
以前部分 2020-04-05
python 实例方法(静态方法、类方法、实例方法)
class Person:
def __init__(self):
"""
构造方法
:return:
"""
print("__init__方法被调用")
pass
name = "小明"
gender = "male"
age = 18
def __del__(self):
"""
析构方法
:return:
"""
print("__del__方法被调用!")
pass
@staticmethod
def staticShow():
"""
静态方法:@staticmethod,无参数
:return:
"""
print(Person.name, Person.gender, Person.age)
@classmethod
def classShow(cls):
"""
类方法:有classmethod 修饰,是一个参数为cls
:return:
"""
print(cls.name, cls.gender, cls.age)
def instanceShow(self):
"""
实例方法:实例方法第一个参数为self
:return:
"""
print(self.name, self.gender, self.age)
p = Person()
p.instanceShow()
Person.classShow()
Person.staticShow()
# 输出
"""
__init__方法被调用
小明 male 18
小明 male 18
小明 male 18
__del__方法被调用!
"""
类的继承super函数
class Animal(object):
def __init__(self, name):
self.name = name
def greet(self):
print("父类方法greet被调用了!")
class Dog(Animal):
def greet(self):
super(Dog, self).greet() #调用父类Animal的greet方法
print('子类方法')
d=Dog("xiaohuang")
d.greet()
class Base(object):
def __init__(self, a, b):
self.a = a
self.b = b
class A(Base):
def __init__(self, a, b, c):
super(A, self).__init__(a, b) # Python3 可使用 super().__init__(a, b)
self.c = c
a=A(100,200,300)
print("a=%d, b=%d, c=%d" % (a.a,a.b,a.c))
# 输出
父类方法greet被调用了!
子类方法
a=100, b=200, c=300
子类对父类的继承,并在父类的基础上重写了部分方法,称之为“多态”
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
self.weight = 'weight'
def talk(self):
print("person is talking....")
class Chinese(Person):
def __init__(self, name, age, language):
Person.__init__(self, name, age)
self.language = language
print(self.name, self.age, self.weight, self.language)
def talk(self): # 子类 重构方法
print('%s is speaking chinese' % self.name)
def walk(self):
print('is walking...')
c = Chinese('bigberg', 22, 'Chinese')
c.talk()
# 输出
bigberg 22 weight Chinese
bigberg is speaking chinese
结尾小彩蛋!
文件操作
方法 | 含义 |
---|---|
r | 只读,文件不存在是报错 |
w | 写,覆盖写 |
a | 写,追加写 |
rb | 二进制方式打开文件,只读 |
def write_file():
file = "abc.txt"
content = "haha\n12345"
with open(file, "w") as f:
f.write(content)
try:
write_file()
except Exception as err:
print(err)
